Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 <bits/stdc++.h>
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[0];
 
    // 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[0];
 
    // 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




<script>
// Javascript 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
    function minEmail(email)
    {
        // Stores string by replacing at
    // with @ and dot with '.'# such
    // that the string is valid email
    let ans = "";
    let len = email.length;
  
    // append first character
    ans += email[0];
  
    // Stores index
    let i = 1;
  
    // Check if at(@) already included
    // or not
    let 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
     
    // To display the result
    let email="geeksforgeeksatgmaildotcom";
    document.write(minEmail(email));
     
 
 
// This code is contributed by rag2127
</script>


Output: 

geeksforgeeks@gmail.com

 

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



Last Updated : 16 May, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads