通过替换指定的子字符串,将字符串简化为最小长度的有效电子邮件地址。


在这个问题中,我们给出了包含“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”替换为“@”字符,但程序员需要确保它只向字符串添加一个“@”字符。

更新于:2023年8月10日

56 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告