Dada una array arr[] de N strings que consisten en caracteres en minúsculas, la tarea es contar los pares en la array que satisfacen las condiciones dadas:
- Ambas strings tienen el mismo número de pares.
- Las primeras vocales de ambas strings son iguales.
- La última vocal de ambas strings es la misma.
Tenga en cuenta que una string solo se puede usar en un solo par.
Ejemplos:
Entrada: arr[] = {“geeks”, “for”, “geeks”, “geek”}
Salida: 1
El único par válido es (“geeks”, “geeks”).
«geek» también podría emparejarse con «geeks», pero
ambos «geeks» ya se han emparejado.Entrada: arr[] = {“código”, “disparar”, “modo”}
Salida: 1
Enfoque: almacenaremos todas las vocales que aparecen en una palabra para cada palabra y haremos una tupla de la primera vocal, la última vocal y el recuento total de vocales y almacenaremos el índice correspondiente con respecto a esa tupla usando el mapa. Por último, revisaremos el mapa y contaremos el número de pares que se pueden formar utilizando los valores de tupla almacenados en el mapa.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function that returns true if c is vowel bool is_vowel(char c) { return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'); } // Function to return the count of required pairs int count(string s[], int n) { map<tuple<char, char, int>, vector<int> > map; // For every string of the array for (int i = 0; i < n; i++) { // Vector to store the vowels // of the current string vector<char> vowel; for (int j = 0; j < s[i].size(); j++) { // If current character is a vowel if (is_vowel(s[i][j])) vowel.push_back(s[i][j]); } // If current string contains vowels if (vowel.size() > 0) { int len = vowel.size(); // Create tuple (first vowel, // last vowel, total vowels) map[make_tuple(vowel[0], vowel[len - 1], len)] .push_back(i); } } int count = 0; for (auto i : map) { // v stores the indices for which // the given condition satisfies // Total valid pairs will be half the size vector<int> v = i.second; count += v.size() / 2; } return count; } // Driver code int main() { string s[] = { "geeks", "for", "geeks" }; int n = sizeof(s) / sizeof(string); cout << count(s, n); return 0; }
Python3
# Python3 implementation of the approach # Function that returns true if c is vowel def is_vowel(c): return (c == 'a' or c == 'e' or c == 'i' or c == 'o' or c == 'u') # Function to return the count of required pairs def count(s, n): map=dict() # For every of the array for i in range(n): # Vector to store the vowels # of the current string vowel=[] for j in range(len(s[i])): # If current character is a vowel if (is_vowel(s[i][j])): vowel.append(s[i][j]) # If current contains vowels if (len(vowel) > 0): Len = len(vowel) # Create tuple (first vowel, # last vowel, total vowels) if (vowel[0],vowel[Len - 1], Len) in map.keys(): map[(vowel[0],vowel[Len - 1], Len)].append(i) else: map[(vowel[0],vowel[Len - 1], Len)]=[i,] count = 0 for i in map: # v stores the indices for which # the given condition satisfies # Total valid pairs will be half the size v = map[i] count += len(v)// 2 return count # Driver code s = ["geeks", "for", "geeks"] n = len(s) print(count(s, n)) # This code is contributed by mohit kumar 29
1