Dada una string S , la tarea es verificar si podemos hacer la string lexicográficamente más pequeña invirtiendo cualquier substring de la string dada.
Ejemplos:
Entrada: S = «striver»
Salida: Sí
Invierta «rive» para obtener «stevirr», que es lexicográficamente más pequeño.
Entrada: S = “rxz”
Salida: No
Enfoque : iterar en la string y verificar si hay algún índice s[i] > s[i + 1] . Si existe al menos uno de esos índices, entonces es posible que no lo sea.
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 s // can be made lexicographically smaller // by reversing a sub-string in s bool check(string s) { int n = s.size(); // Traverse in the string for (int i = 0; i < n - 1; i++) { // Check if s[i+1] < s[i] if (s[i] > s[i + 1]) return true; } // Not possible return false; } // Driver code int main() { string s = "geeksforgeeks"; if (check(s)) cout << "Yes"; else cout << "No"; return 0; }
Java
// Java implementation of the approach class GFG { // Function that returns true if s // can be made lexicographically smaller // by reversing a sub-string in s static boolean check(String s) { int n = s.length(); // Traverse in the string for (int i = 0; i < n - 1; i++) { // Check if s[i+1] < s[i] if (s.charAt(i) > s.charAt(i + 1)) return true; } // Not possible return false; } // Driver code public static void main(String args[]) { String s = "geeksforgeeks"; if (check(s)) System.out.println("Yes"); else System.out.println("No"); } } // This code is contributed by Arnab Kundu
Python3
# Python 3 implementation of the approach # Function that returns true if s # can be made lexicographically smaller # by reversing a sub-string in s def check(s): n = len(s) # Traverse in the string for i in range(n-1): # Check if s[i+1] < s[i] if (s[i] > s[i + 1]): return True # Not possible return False # Driver code if __name__ == '__main__': s = "geeksforgeeks" if (check(s)): print("Yes") else: print("No") # This code is contributed by # Surendra_Gangwar
C#
// C# implementation of the approach using System; class GFG { // Function that returns true if s // can be made lexicographically smaller // by reversing a sub-string in s static bool check(String s) { int n = s.Length; // Traverse in the string for (int i = 0; i < n - 1; i++) { // Check if s[i+1] < s[i] if (s[i] > s[i + 1]) return true; } // Not possible return false; } // Driver code public static void Main(String []args) { String s = "geeksforgeeks"; if (check(s)) Console.WriteLine("Yes"); else Console.WriteLine("No"); } } // This code has been contributed by 29AjayKumar
PHP
<?php // PHP implementation of the approach // Function that returns true if s // can be made lexicographically smaller // by reversing a sub-string in s function check($s) { $n = strlen($s); // Traverse in the string for ($i = 0; $i < $n - 1; $i++) { // Check if $s[$i+1] < $s[$i] if ($s[$i] > $s[$i + 1]) return true; } // Not possible return false; } // Driver code $s = "geeksforgeeks"; if (check($s)) echo "Yes"; else echo "No"; // This code is contributed by jit_t ?>
Javascript
<script> // Javascript implementation of the approach // Function that returns true if s // can be made lexicographically smaller // by reversing a sub-string in s function check(s) { let n = s.length; // Traverse in the string for (let i = 0; i < n - 1; i++) { // Check if s[i+1] < s[i] if (s[i] > s[i + 1]) return true; } // Not possible return false; } let s = "geeksforgeeks"; if (check(s)) document.write("Yes"); else document.write("No"); </script>
Producción:
Yes
Complejidad de tiempo: O(N)
Espacio Auxiliar: O(N)