通过替换指定的子字符串,将字符串简化为最小长度的有效电子邮件地址。
在这个问题中,我们给出了包含“dot”和“at”单词的电子邮件字符串。我们需要将它们分别替换为“.”和“@”字符。
注意 - 有效的电子邮件地址应该只包含一个“@”字符。它应该包含“@”字符之前的任何前缀和之后的域名。此外,有效的电子邮件可以包含多个“.”字符。“@”和“.”字符不应位于电子邮件地址的开头或结尾。
问题陈述 – 我们给定一个包含电子邮件地址的字符串 str,字符串长度等于 N。我们需要通过将“at”单词替换为“@”字符,并将“dot”字符串替换为“.”字符来缩短字符串。
示例
输入 – str= "contactattutorialspointdotcom"
输出 – [email protected]
说明 – 我们分别将“at”和“dot”替换为“@”和“.”字符。
输入 – str = “atatgmaildotcom”
输出 – [email protected]
说明 – 电子邮件只能包含一个“@”,并且不能在开头包含它,所以输出如上所示。
方法 1
在这种方法中,我们将检查电子邮件从当前字符开始是否包含子字符串“at”或“dot”。我们可以将其替换为“@”和“.”字符。
算法
定义变量“len”并存储变量的长度。
定义变量“minStr”并将其初始化为原始字符串的第一个字符。
定义变量“I”并将其初始化为 1 以用于循环。此外,定义变量“isAtIncluded”并将其初始化为 false,以跟踪字符串中是否只包含了一个“@”字符。
使用循环开始迭代字符串。
如果 I < len – 3,isAtIncluded 的值为 false,并且长度为 2 的子字符串等于“at”,则将“@”附加到“minStr”字符串。同时,将“I”增加 1。
否则,如果 I < len – 4,并且长度为 3 的子字符串等于“dot”,则将“.”字符附加到给定字符串。同时,将 I 的值增加 2。
否则,将当前字符附加到 minStr 字符串。
返回 minstr 字符串值。
示例
#include <iostream> #include <iostream> using namespace std; // function to minimize the string by replacing at with @ and dot with '.' string minifyEmail(string original){ string minstr = ""; int len = original.length(); // append the first character to the final string minstr += original[0]; // start index int i = 1; // Check wether at(@) already included or not bool isAtIncluded = false; // travere the string for (int i = 0; i < len; i++){ // at can be replaced at most once if (i < len - 3 && !isAtIncluded && original.substr(i, 2) == "at"){ // add '@' to minstr minstr += '@'; // Update isAtIncluded isAtIncluded = true; i++; } // If current substring found dot else if (i < len - 4 && original.substr(i, 3) == "dot"){ // add '.' to minstr minstr += '.'; i += 2; } else { minstr += original[i]; } } return minstr; } int main(){ string original = "contactattutorialspointdotcom"; cout << "The string after minifying in the proper original format is " << minifyEmail(original); }
输出
The string after minifying in the proper original format is [email protected]
时间复杂度 – O(N),因为我们遍历了字符串。
空间复杂度 – O(N),因为我们存储了简化的字符串。
在上面的代码中,我们总是将第一个字符附加到 minstr 字符串。因此,它永远不会在开头添加“@”或“.”字符。此外,用户可以使用 replace() 方法将“dot”替换为“.”,将“at”替换为“@”字符,但程序员需要确保它只向字符串添加一个“@”字符。