 Open in App
Not now

# Reduce a string to a valid email address of minimum length by replacing specified substrings

• Last Updated : 16 May, 2022

Given string S representing an email address of length N, the task is to find the minimum possible length of the string by replacing “dot” with ‘.’ and “at” with ‘@’ such that the string represents a valid email address.

An email address can have only one ‘@’ and can have possibly zero or multiple dots (‘.’) such that it can not have ‘@’ or ‘.’ at the start and at the end of the email address.

Examples:

Input: S = “geeksforgeeksatgmaildotcom”
Output: geeksforgeeks@gmail.com
Explanation:
Replacing one “at” with ‘@’ and one “dot” with ‘.’ modifies S to geeksforgeeks@gmail.com

Input: S = “atatdotdotdot”
Output: at@…dot
Explanation:
Multiple replacements are possible, but we cannot replace “at” from the start or “dot” from the end of the email address as it won’t form a valid email address.

Approach: The idea is to replace all “dot” substrings with “.” and one “at” substring with “@” except from the start or from the end of the string. Follow the below steps to solve the problem:

• Traverse the string over indices [1, N – 2].
• If S[i, i + 2] is “dot”, replace it with “.”. If S[i, i + 1] is “at”, replace it with “@”.
• Print the updated string as the answer.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to find the minimum length by``// replacing at with @ and dot with '.'``// such that the string is valid email``string minEmail(string email)``{` `    ``// Stores string by replacing at``    ``// with @ and dot with '.'# such``    ``// that the string is valid email``    ``string ans = ``""``;``    ``int` `len = email.length();` `    ``// append first character``    ``ans += email;` `    ``// Stores index``    ``int` `i = 1;` `    ``// Check if at(@) already included``    ``// or not``    ``bool` `notAt = ``true``;` `    ``// Iterate over characters of the string``    ``while` `(i < len) {` `        ``// at can be replaced at most once``        ``if` `(i < len - 3 && notAt && email[i] == ``'a'``            ``&& email[i + 1] == ``'t'``) {` `            ``// Update ans``            ``ans += ``'@'``;` `            ``// Update i``            ``i += 1;` `            ``// Update notAt``            ``notAt = ``false``;``        ``}` `        ``// If current substring found dot``        ``else` `if` `(i < len - 4 && email[i] == ``'d'``                 ``&& email[i + 1] == ``'o'``                 ``&& email[i + 2] == ``'t'``) {` `            ``// Update ans``            ``ans += ``'.'``;` `            ``// Update i``            ``i += 2;``        ``}``        ``else` `{` `            ``// Update ans``            ``ans += email[i];``        ``}` `        ``// Update i``        ``i += 1;``    ``}``    ``return` `ans;``}` `// Driver code``int` `main()``{` `    ``// To display the result``    ``string email = ``"geeksforgeeksatgmaildotcom"``;``    ``cout << (minEmail(email));``}` `// This code is contributed by chitranayal.`

## Java

 `// Java program for the above approach``class` `GFG {` `  ``// Function to find the minimum length by``  ``// replacing at with @ and dot with '.'``  ``// such that the string is valid email``  ``static` `String minEmail(String email)``  ``{` `    ``// Stores string by replacing at``    ``// with @ and dot with '.'# such``    ``// that the string is valid email``    ``String ans = ``new` `String(``""``);``    ``int` `len = email.length();` `    ``// append first character``    ``ans += email.charAt(``0``);` `    ``// Stores index``    ``int` `i = ``1``;` `    ``// Check if at(@) already included``    ``// or not``    ``boolean` `notAt = ``true``;` `    ``// Iterate over characters of the string``    ``while``(i < len){` `      ``// at can be replaced at most once``      ``if` `(i < len-``3` `&& notAt``          ``&& email.charAt(i) == ``'a'` `&& email.charAt(i+``1``) == ``'t'``)``      ``{` `        ``// Update ans     ``        ``ans += ``'@'``;` `        ``// Update i``        ``i += ``1``;` `        ``// Update notAt``        ``notAt = ``false``;``      ``}` `      ``// If current substring found dot``      ``else` `if``( i < len-``4` `&& email.charAt(i) == ``'d'``              ``&& email.charAt(i+``1``) == ``'o'` `&& email.charAt(i+``2``) == ``'t'``)``      ``{` `        ``// Update ans``        ``ans += ``'.'``; ` `        ``// Update i``        ``i += ``2``;``      ``}``      ``else``      ``{` `        ``// Update ans``        ``ans += email.charAt(i);``      ``}` `      ``// Update i   ``      ``i += ``1``;``    ``}``    ``return` `ans;``  ``}` `  ``// Driver code``  ``public` `static` `void` `main (String[] args)``  ``{` `    ``// To display the result``    ``String email = ``new` `String(``"geeksforgeeksatgmaildotcom"``);``    ``System.out.println(minEmail(email));``  ``}``}` `// This code is contributed by rohitsingh07052.`

## Python3

 `# python program for the above approach` `# Function to find the minimum length by``# replacing at with @ and dot with '.'``# such that the string is valid email``def` `minEmail(email):` `    ``# Stores string by replacing at``    ``# with @ and dot with '.'# such``    ``# that the string is valid email``    ``ans ``=` `''` `    ``# append first character``    ``ans ``+``=` `email[``0``]` `    ``# Stores index``    ``i ``=` `1` `    ``# Check if at(@) already included``    ``# or not``    ``notAt ``=` `True` `    ``# Iterate over characters of the string``    ``while` `i < ``len``(email):` `        ``# at can be replaced at most once``        ``if` `(i < ``len``(email)``-``3` `and` `notAt``            ``and` `email[i:i ``+` `2``] ``=``=` `'at'``):``  ` `            ``# Update ans     ``            ``ans ``+``=` `'@'` `            ``# Update i``            ``i ``+``=` `1``            ` `            ``# Update notAt``            ``notAt ``=` `False` `        ``# If current substring found dot``        ``elif` `i < ``len``(email)``-``4` `and` `email[i:i ``+` `3``] ``=``=` `'dot'``:` `            ``# Update ans``            ``ans ``+``=` `'.'`          `            ` `            ``# Update i``            ``i ``+``=` `2``        ``else``:` `            ``# Update ans``            ``ans ``+``=` `email[i]``            ` `        ``# Update i   ``        ``i ``+``=` `1``    ``return` `ans` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``email ``=` `'geeksforgeeksatgmaildotcom'` `    ``# To display the result``    ``print``(minEmail(email))`

## C#

 `// C# program for the above approach``using` `System;``public` `class` `GFG``{` `  ``// Function to find the minimum length by``  ``// replacing at with @ and dot with '.'``  ``// such that the string is valid email``  ``static` `String minEmail(String email)``  ``{` `    ``// Stores string by replacing at``    ``// with @ and dot with '.'# such``    ``// that the string is valid email``    ``String ans = ``""``;``    ``int` `len = email.Length;` `    ``// append first character``    ``ans += email;` `    ``// Stores index``    ``int` `i = 1;` `    ``// Check if at(@) already included``    ``// or not``    ``bool` `notAt = ``true``;` `    ``// Iterate over characters of the string``    ``while``(i < len)``    ``{` `      ``// at can be replaced at most once``      ``if` `(i < len-3 && notAt``          ``&& email[i] == ``'a'` `&& email[i + 1] == ``'t'``)``      ``{` `        ``// Update ans     ``        ``ans += ``'@'``;` `        ``// Update i``        ``i += 1;` `        ``// Update notAt``        ``notAt = ``false``;``      ``}` `      ``// If current substring found dot``      ``else` `if``( i < len-4 && email[i] == ``'d'``              ``&& email[i+1] == ``'o'` `&& email[i+2] == ``'t'``)``      ``{` `        ``// Update ans``        ``ans += ``'.'``; ` `        ``// Update i``        ``i += 2;``      ``}``      ``else``      ``{` `        ``// Update ans``        ``ans += email[i];``      ``}` `      ``// Update i   ``      ``i += 1;``    ``}``    ``return` `ans;``  ``}` `  ``// Driver code``  ``public` `static` `void` `Main(String[] args)``  ``{` `    ``// To display the result``    ``String email = ``"geeksforgeeksatgmaildotcom"``;``    ``Console.WriteLine(minEmail(email));``  ``}``}` `// This code is contributed by shikhasingrajput`

## Javascript

 ``

Output:

`geeksforgeeks@gmail.com`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up