Dada una string str , la tarea es verificar si esa string es una string bitónica inversa o no. Si la string str es una string bitónica inversa, imprima «SÍ» . De lo contrario, escriba “NO” .
Una string bitónica inversa es una string en la que los caracteres están dispuestos en orden decreciente seguido de orden creciente de sus valores ASCII.
Ejemplos:
Entrada: str = “zyxbcd”
Salida: SÍ
Explicación:
En la string anterior, los valores ASCII primero disminuyen {z, y, x} y luego aumentan {b, c, d}.Entrada: str = “abcdwef”
Salida: NO
Enfoque:
Para resolver el problema, recorra la string y verifique si los valores ASCII de los caracteres de la string siguen alguno de los siguientes patrones:
- estrictamente creciente.
- estrictamente decreciente.
- Estrictamente decreciente seguido de estrictamente creciente.
Siga estos pasos a continuación para resolver el problema:
- Recorra la string y para cada carácter, verifique si el valor ASCII del siguiente carácter es menor que el valor ASCII del carácter actual o no.
- Si en algún momento, el valor ASCII del siguiente carácter es mayor que el valor ASCII del carácter actual, rompa el ciclo.
- Ahora recorra desde ese índice y para cada carácter, verifique si el valor ASCII del siguiente carácter es mayor que el valor ASCII del carácter actual o no.
- Si en algún momento, el valor ASCII del siguiente carácter es más pequeño que el valor ASCII del carácter actual antes de llegar al final de la array, imprima «NO» y rompa el bucle.
- Si toda la string se recorre con éxito, imprima «SÍ» .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to check if the given // string is reverse bitonic int checkReverseBitonic(string s) { int i, j; // Check for decreasing sequence for (i = 1; i < s.size(); i++) { if (s[i] < s[i - 1]) continue; if (s[i] >= s[i - 1]) break; } // If end of string has // been reached if (i == s.size() - 1) return 1; // Check for increasing sequence for (j = i + 1; j < s.size(); j++) { if (s[j] > s[j - 1]) continue; if (s[j] <= s[j - 1]) break; } i = j; // If the end of string // hasn't been reached if (i != s.size()) return 0; // If the string is // reverse bitonic return 1; } // Driver Code int main() { string s = "abcdwef"; (checkReverseBitonic(s) == 1) ? cout << "YES" : cout << "NO"; return 0; }
Java
// Java program to implement // the above approach class GFG{ // Function to check if the given // string is reverse bitonic static int checkReverseBitonic(String s) { int i, j; // Check for decreasing sequence for(i = 1; i < s.length(); i++) { if (s.charAt(i) < s.charAt(i - 1)) continue; if (s.charAt(i) >= s.charAt(i - 1)) break; } // If end of string has // been reached if (i == s.length() - 1) return 1; // Check for increasing sequence for(j = i + 1; j < s.length(); j++) { if (s.charAt(j) > s.charAt(j - 1)) continue; if (s.charAt(j) <= s.charAt(j - 1)) break; } i = j; // If the end of string // hasn't been reached if (i != s.length()) return 0; // If the string is // reverse bitonic return 1; } // Driver Code public static void main(String []args) { String s = "abcdwef"; if(checkReverseBitonic(s) == 1) System.out.println("YES"); else System.out.println("NO"); } } // This code is contributed by grand_master
Python3
# Python3 program to implement # the above approach # Function to check if the given # string is reverse bitonic def checkReverseBitonic(s): i = 0 j = 0 # Check for decreasing sequence for i in range(len(s)): if (s[i] < s[i - 1]) : continue; if (s[i] >= s[i - 1]) : break; # If end of string has been reached if (i == len(s)-1) : return 1; # Check for increasing sequence for j in range(i + 1, len(s)): if (s[j] > s[j - 1]) : continue; if (s[j] <= s[j - 1]) : break; i = j; # If the end of string hasn't # been reached if (i != len(s)) : return 0; # If reverse bitonic return 1; # Given string s = "abcdwef" # Function Call if(checkReverseBitonic(s) == 1) : print("YES") else: print("NO")
C#
// C# program to implement // the above approach using System; class GFG{ // Function to check if the given // string is reverse bitonic static int checkReverseBitonic(String s) { int i, j; // Check for decreasing sequence for(i = 1; i < s.Length; i++) { if (s[i] < s[i - 1]) continue; if (s[i] >= s[i - 1]) break; } // If end of string has // been reached if (i == s.Length - 1) return 1; // Check for increasing sequence for(j = i + 1; j < s.Length; j++) { if (s[j] > s[j - 1]) continue; if (s[j] <= s[j - 1]) break; } i = j; // If the end of string // hasn't been reached if (i != s.Length) return 0; // If the string is // reverse bitonic return 1; } // Driver Code public static void Main(String []args) { String s = "abcdwef"; if(checkReverseBitonic(s) == 1) Console.WriteLine("YES"); else Console.WriteLine("NO"); } } // This code is contributed by 29AjayKumar
Javascript
<script> // Javascript program to implement // the above approach // Function to check if the given // string is reverse bitonic function checkReverseBitonic(s) { var i, j; // Check for decreasing sequence for(i = 1; i < s.length; i++) { if (s[i] < s[i - 1]) continue; if (s[i] >= s[i - 1]) break; } // If end of string has // been reached if (i == s.length - 1) return 1; // Check for increasing sequence for(j = i + 1; j < s.length; j++) { if (s[j] > s[j - 1]) continue; if (s[j] <= s[j - 1]) break; } i = j; // If the end of string // hasn't been reached if (i != s.length) return 0; // If the string is // reverse bitonic return 1; } // Driver Code var s = "abcdwef"; (checkReverseBitonic(s) == 1) ? document.write("YES") : document.write("NO"); // This code is contributed by rutvik_56 </script>
NO
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por grand_master y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA