Dada una string str y una array de strings strArr[] , la tarea es ordenar la array según el orden alfabético definido por str .
Nota: str y cada string en strArr[] consta solo de alfabetos en minúsculas.
Ejemplos:
Entrada: str = “fguecbdavwyxzhijklmnopqrst”,
strArr[] = {“geeksforgeeks”, “es”, “el”, “mejor”, “lugar”, “para”, “aprendizaje”}
Salida: para los geeksforgeeks lo mejor es el lugar de aprendizaje
Entrada: str = “avdfghiwyxzjkecbmnopqrstul”,
strArr[] = {“arco iris”, “consiste”, “de”, “colores”}
Salida: consiste en los colores del arco iris
Enfoque: recorra cada carácter de str y almacene el valor en un mapa con carácter como clave y su índice en la array como valor .
Ahora, este mapa actuará como el nuevo orden alfabético de los personajes. Comience a comparar la string en strArr[] y, en lugar de comparar los valores ASCII de los caracteres, compare los valores asignados a esos caracteres particulares en el mapa, es decir, si el carácter c1 aparece antes que el carácter c2 en str , entonces c1 < c2 .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Map to store the characters with their order // in the new alphabetical order unordered_map<char, int> h; // Function that returns true if x < y // according to the new alphabetical order bool compare(string x, string y) { for (int i = 0; i < min(x.size(), y.size()); i++) { if (h[x[i]] == h[y[i]]) continue; return h[x[i]] < h[y[i]]; } return x.size() < y.size(); } // Driver code int main() { string str = "fguecbdavwyxzhijklmnopqrst"; vector<string> v{ "geeksforgeeks", "is", "the", "best", "place", "for", "learning" }; // Store the order for each character // in the new alphabetical sequence h.clear(); for (int i = 0; i < str.size(); i++) h[str[i]] = i; sort(v.begin(), v.end(), compare); // Print the strings after sorting for (auto x : v) cout << x << " "; return 0; }
Java
// Java implementation of the approach import java.util.Arrays; import java.util.Comparator; public class GFG { private static void sort(String[] strArr, String str) { Comparator<String> myComp = new Comparator<String>() { @Override public int compare(String a, String b) { for(int i = 0; i < Math.min(a.length(), b.length()); i++) { if (str.indexOf(a.charAt(i)) == str.indexOf(b.charAt(i))) { continue; } else if(str.indexOf(a.charAt(i)) > str.indexOf(b.charAt(i))) { return 1; } else { return -1; } } return 0; } }; Arrays.sort(strArr, myComp); } // Driver Code public static void main(String[] args) { String str = "fguecbdavwyxzhijklmnopqrst"; String[] strArr = {"geeksforgeeks", "is", "the", "best", "place", "for", "learning"}; sort(strArr, str); for(int i = 0; i < strArr.length; i++) { System.out.print(strArr[i] + " "); } } }
Python3
# Python3 implementation of the approach # Function to sort and print the array # according to the new alphabetical order def sortStringArray(s, a, n): # Sort the array according to the new alphabetical order a = sorted(a, key = lambda word: [s.index(c) for c in word]) for i in a: print(i, end =' ') # Driver code s = "fguecbdavwyxzhijklmnopqrst" a = ["geeksforgeeks", "is", "the", "best", "place", "for", "learning"] n = len(a) sortStringArray(s, a, n)
Javascript
<script> // JavaScript implementation of the approach // Map to store the characters with their order // in the new alphabetical order let h = new Map(); // Function that returns true if x < y // according to the new alphabetical order function compare(x, y) { for (let i = 0; i < Math.min(x.length, y.length); i++) { if (h.get(x[i]) == h.get(y[i])) continue; return h.get(x[i]) - h.get(y[i]); } return x.length - y.length; } // Driver code let str = "fguecbdavwyxzhijklmnopqrst"; let v = [ "geeksforgeeks", "is", "the","best", "place", "for", "learning" ]; // Store the order for each character // in the new alphabetical sequence h.clear(); for (let i = 0; i < str.length; i++) h.set(str[i],i); v.sort(compare); // Print the strings after sorting for (let x of v) document.write(x + " "); // This code is contributed by shinjanpatra </script>
for geeksforgeeks best is learning place the
Complejidad de tiempo: O(N * log(N)), donde N es el tamaño de la string str
Espacio Auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por Lohith sai Andra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA