Dada una string de entrada y un patrón, compruebe si los caracteres de la string de entrada siguen el mismo orden determinado por los caracteres presentes en el patrón. Suponga que no habrá caracteres duplicados en el patrón.
Ejemplos:
Input: string = "engineers rock" pattern = "er"; Output: true Explanation: All 'e' in the input string are before all 'r'. Input: string = "engineers rock" pattern = "egr"; Output: false Explanation: There are two 'e' after 'g' in the input string. Input: string = "engineers rock" pattern = "gsr"; Output: false Explanation: There are one 'r' before 's' in the input string.
La idea es muy simple. Para cada par (x, y) de caracteres consecutivos en la string de patrón, encontramos la última aparición de x y la primera aparición de y en la string de entrada. Si la última aparición del carácter x es posterior a la primera aparición del carácter y para cualquier par, devolvemos falso. Será suficiente verificar cada par de caracteres consecutivos en la string de patrón. Por ejemplo, si consideramos tres caracteres consecutivos en el patrón, digamos x, y y z, si (x, y) e (y, z) devuelven verdadero, eso implica que (x, z) también es verdadero.
A continuación se muestra la implementación de la idea anterior.
C++
// C++ program check if characters in the input string // follows the same order as determined by characters // present in the given pattern #include <iostream> using namespace std; // Function to check if characters in the input string // follows the same order as determined by characters // present in the given pattern bool checkPattern(string str, string pattern) { // len stores length of the given pattern int len = pattern.length(); // if length of pattern is more than length of // input string, return false; if (str.length() < len) return false; for (int i = 0; i < len - 1; i++) { // x, y are two adjacent characters in pattern char x = pattern[i]; char y = pattern[i + 1]; // find index of last occurrence of character x // in the input string size_t last = str.find_last_of(x); // find index of first occurrence of character y // in the input string size_t first = str.find_first_of(y); // return false if x or y are not present in the // input string OR last occurrence of x is after // the first occurrence of y in the input string if (last == string::npos || first == string::npos || last > first) return false; } // return true if string matches the pattern return true; } // Driver code int main() { string str = "engineers rock"; string pattern = "gsr"; cout << boolalpha << checkPattern(str, pattern); return 0; }
Java
// Java program check if characters in the input string // follows the same order as determined by characters // present in the given pattern class GFG { // Function to check if characters in the input string // follows the same order as determined by characters // present in the given pattern static boolean checkPattern(String str, String pattern) { // len stores length of the given pattern int len = pattern.length(); // if length of pattern is more than length of // input string, return false; if (str.length() < len) { return false; } for (int i = 0; i < len - 1; i++) { // x, y are two adjacent characters in pattern char x = pattern.charAt(i); char y = pattern.charAt(i + 1); // find index of last occurrence of character x // in the input string int last = str.lastIndexOf(x); // find index of first occurrence of character y // in the input string int first = str.indexOf(y); // return false if x or y are not present in the // input string OR last occurrence of x is after // the first occurrence of y in the input string if (last == -1 || first == -1 || last > first) { return false; } } // return true if string matches the pattern return true; } // Driver code public static void main(String[] args) { String str = "engineers rock"; String pattern = "gsr"; System.out.println(checkPattern(str, pattern)); } } // This code contributed by Rajput-Ji
Python3
# Python3 program check if characters in # the input string follows the same order # as determined by characters present in # the given pattern # Function to check if characters in the # input string follows the same order as # determined by characters present # in the given pattern def checkPattern(string, pattern): # len stores length of the given pattern l = len(pattern) # if length of pattern is more than length # of input string, return false; if len(string) < l: return False for i in range(l - 1): # x, y are two adjacent characters in pattern x = pattern[i] y = pattern[i + 1] # find index of last occurrence of # character x in the input string last = string.rindex(x) # find index of first occurrence of # character y in the input string first = string.index(y) # return false if x or y are not present # in the input string OR last occurrence of # x is after the first occurrence of y # in the input string if last == -1 or first == -1 or last > first: return False # return true if # string matches the pattern return True # Driver Code if __name__ == "__main__": string = "engineers rock" pattern = "gsr" print(checkPattern(string, pattern)) # This code is contributed by # sanjeev2552
C#
// C# program check if characters in the input string // follows the same order as determined by characters // present in the given pattern using System; class GFG { // Function to check if characters in the input string // follows the same order as determined by characters // present in the given pattern static Boolean checkPattern(String str, String pattern) { // len stores length of the given pattern int len = pattern.Length; // if length of pattern is more than length of // input string, return false; if (str.Length < len) { return false; } for (int i = 0; i < len - 1; i++) { // x, y are two adjacent characters in pattern char x = pattern[i]; char y = pattern[i+1]; // find index of last occurrence of character x // in the input string int last = str.LastIndexOf(x); // find index of first occurrence of character y // in the input string int first = str.IndexOf(y); // return false if x or y are not present in the // input string OR last occurrence of x is after // the first occurrence of y in the input string if (last == -1 || first == -1 || last > first) { return false; } } // return true if string matches the pattern return true; } // Driver code public static void Main(String[] args) { String str = "engineers rock"; String pattern = "gsr"; Console.WriteLine(checkPattern(str, pattern)); } } /* This code contributed by PrinciRaj1992 */
Javascript
<script> // JavaScript program check if characters in the input string // follows the same order as determined by characters // present in the given pattern // Function to check if characters in the input string // follows the same order as determined by characters // present in the given pattern function checkPattern(str, pattern) { // len stores length of the given pattern var len = pattern.length; // if length of pattern is more than length of // input string, return false; if (str.length < len) { return false; } for (var i = 0; i < len - 1; i++) { // x, y are two adjacent characters in pattern var x = pattern[i]; var y = pattern[i + 1]; // find index of last occurrence of character x // in the input string var last = str.lastIndexOf(x); // find index of first occurrence of character y // in the input string var first = str.indexOf(y); // return false if x or y are not present in the // input string OR last occurrence of x is after // the first occurrence of y in the input string if (last === -1 || first === -1 || last > first) { return false; } } // return true if string matches the pattern return true; } // Driver code var str = "engineers rock"; var pattern = "gsr"; document.write(checkPattern(str, pattern)); // This code is contributed by rdtank. </script>
false
Hemos discutido dos enfoques más para resolver este problema.
Compruebe si la string sigue el orden de los caracteres definidos por un patrón o no | Conjunto 2
Comprobar si la string sigue el orden de los caracteres definidos por un patrón o no | conjunto 3
Este artículo es una contribución de Aditya Goel . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA