Dada una array de strings Files[] , que representa el nombre de algunos archivos, la tarea es clasificar la array en función del orden lexicográfico de las extensiones de los nombres de archivo. Si más de un archivo tiene la misma extensión, ordénelos lexicográficamente.
Ejemplos:
Entrada: archivos[] = {“ajay.cpp”, “pchy.pdf”, “loki.docx”, “raju.zip” }
Salida: ajay.cpp, loki.docx, pchy.pdf, raju.zip
Explicación:
Orden ordenado lexicográficamente de “cpp” < “docx” < “pdf” < “zip”Entrada: archivos[] = {“abc.cpp”, “bcd.cpp”, “ab.cpp”, “efg.zip”}
Salida: ab.cpp, abc.cpp, bcd.cpp, efg.zip
Explicación:
Dado que los nombres de archivo { “abc.cpp”, “bcd.cpp”, “ab.cpp” } tienen la misma extensión, están ordenados por orden lexicográfico de sus nombres.
Enfoque: siga los pasos a continuación para resolver el problema:
- Ordene la array de strings en función de las extensiones mediante una función de comparación .
- Para cualquier par de archivos con la misma extensión, ordénelos en el orden lexicográfico de sus nombres.
- Finalmente, imprima la array de strings.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ Program for the above approach #include <bits/stdc++.h> using namespace std; // Comparator function to sort an array of strings // based on the extension of their file names bool custom(string s1, string s2) { // Stores index of '.' in s1 size_t i = s1.find('.'); // Stores index of '.' in s2 size_t j = s2.find('.'); // Stores name of extension of s2 string d = s1.substr(i + 1); // Stores name of extension of s2 string e = s2.substr(j + 1); // If both files have the // same extension name if (d == e) { // Return lexicographically // smaller of the two strings return s1 < s2; } return d < e; } // Function to sort the files names // based on the name of their extension void sortfromextension(vector<string>& files) { // Sort file names in lexicographical // order of their extensions sort(files.begin(), files.end(), custom); // Print files in sorted form // based on extension names for (auto s : files) { cout << s << ", "; } } // Driver Code int main() { vector<string> files = { "ajay.cpp", "pchy.pdf", "loki.docx", "raju.zip" }; sortfromextension(files); return 0; }
Java
// Java program for above approach import java.util.*; import java.lang.*; class GFG { // Function to sort the files names // based on the name of their extension static void sortfromextension(String[] files) { // Sort file names in lexicographical // order of their extensions Arrays.sort(files, new Comparator<String>(){ public int compare(String s1,String s2){ // Stores index of '.' in s1 int i = s1.indexOf('.'); // Stores index of '.' in s2 int j = s2.indexOf('.'); // Stores name of extension of s2 String d = s1.substring(i + 1); // Stores name of extension of s2 String e = s2.substring(j + 1); return (d.equals(e))?(s1.compareTo(s2)<0?-1:1):(d.compareTo(e)<0?-1:1); } }); // Print files in sorted form // based on extension names for (int i = 0; i < files.length - 1; i++) { System.out.print(files[i] + ", "); } System.out.print(files[files.length - 1]); } // Driver function public static void main (String[] args) { String[] files = { "ajay.cpp", "pchy.pdf", "loki.docx", "raju.zip" }; sortfromextension(files); } } // This code is contributed by offbeat
ajay.cpp, loki.docx, pchy.pdf, raju.zip,
Complejidad de tiempo: O(N * log(N))
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por ajaykr00kj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA