Dada una array arr[] que consta de N strings donde cada string representa una dirección de correo electrónico que consta de alfabetos ingleses, ‘.’, ‘+’ y ‘@’ , la tarea es contar la cantidad de correos electrónicos distintos presentes en la array de acuerdo con las siguientes reglas:
- Una dirección de correo electrónico se puede dividir en dos substrings, el prefijo y el sufijo de ‘@’ , que son el nombre local y el nombre de dominio, respectivamente.
- El ‘.’ se ignora el carácter de la string en el nombre local.
- En el nombre local, se ignoran todos los caracteres después de ‘ + ‘.
Ejemplos:
Entrada: arr[] = {“raghav.agg@geeksforgeeks.com”, “raghavagg@geeksforgeeks.com”}
Salida: 1
Explicación: Eliminar todos los ‘.’ antes de ‘@’ modifica las strings a {“raghavagg@geeksforgeeks.com”} .com”, “raghavagg@geeksforgeeks.com”}. Por lo tanto, el número total de correos electrónicos distintos presentes en la string es 1.Entrada: arr[] = {“avruty+dhir+gfg@geeksforgeeks.com”, “avruty+gfg@geeksforgeeks.com”, “av.ruty@geeksforgeeks.com”}
Salida: 1
Enfoque: el problema dado se puede resolver almacenando cada correo electrónico en un HashSet después de completarlo de acuerdo con la regla dada e imprimir el tamaño del HashSet obtenido. Siga los pasos a continuación para resolver el problema:
- Inicialice un HashSet , digamos S , para almacenar todas las strings distintas después de completar de acuerdo con las reglas dadas.
- Recorra la array dada arr[] y realice los siguientes pasos:
- Encuentre la posición de ‘@’ y guárdela en una variable, digamos pos2 .
- Eliminar todos los ‘.’ caracteres antes de pos2 usando la función erase() .
- Actualice la posición de ‘@’ , es decir, pos2 = find(‘@’) y encuentre la posición de ‘+’ y guárdela en una variable, digamos pos1 como S.find(‘+’) .
- Ahora, borre todos los caracteres después de pos1 y antes de pos2 .
- Inserte todas las strings actualizadas en un HashSet S.
- Después de completar los pasos anteriores, imprima el tamaño de HashSet S como resultado.
A continuación se muestra la implementación del enfoque anterior:
C++14
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to count all the distinct // emails after preprocessing according // to the given rules int distinctEmails(vector<string>& emails) { // Traverse the given array of // strings arr[] for (auto& x : emails) { // Stores the position of '@' // in the string auto pos2 = x.find('@'); // If pos2 < x.size() if (pos2 < x.size()) // Erases all the occurrences // of '.' before pos2 x.erase( remove(x.begin(), x.begin() + pos2, '.'), x.begin() + pos2); // Stores the position of the // first '+' auto pos1 = x.find('+'); // Update the position pos2 pos2 = x.find('@'); // If '+' exists then erase // characters after '+' and // before '@' if (pos1 < x.size() and pos2 < x.size()) { x.erase(pos1, pos2 - pos1); } } // Insert all the updated strings // inside the set unordered_set<string> ans( emails.begin(), emails.end()); // Return the size of set ans return ans.size(); } // Driver Code int main() { vector<string> arr = { "raghav.agg@geeksforgeeks.com", "raghavagg@geeksforgeeks.com" }; // Function Call cout << distinctEmails(arr); return 0; }
Python3
# Python3 program for the above approach # Function to count all the distinct # emails after preprocessing according # to the given rules def distinctEmails(emails): ans = set([]) # Traverse the given array of # strings arr[] for x in emails: # Stores the position of '@' # in the string pos2 = x.find('@') # If pos2 < x.size() if (pos2 < len(x)): # Erases all the occurrences # of '.' before pos2 p = x[:pos2] p = p.replace(".", "") x = p + x[pos2:] # Stores the position of the # first '+' pos1 = x.find('+') # Update the position pos2 pos2 = x.find('@') # If '+' exists then erase # characters after '+' and # before '@' if (pos1 > 0 and pos1 < len(x) and pos2 < len(x)): x = x[:pos1] + x[pos2:] # Insert all the updated strings # inside the set ans.add(x) # Return the size of set ans return len(ans) # Driver Code if __name__ == "__main__": arr = ["raghav.agg@geeksforgeeks.com", "raghavagg@geeksforgeeks.com"] # Function Call print(distinctEmails(arr)) # This code is contributed by ukasp
1
Tiempo Complejidad: O(N 2 )
Espacio Auxiliar: O(N)