Dadas dos strings s1 y s2, compruebe si s2 es una rotación de s1.
Ejemplos:
Input : ABACD, CDABA Output : True Input : GEEKS, EKSGE Output : True
Hemos discutido un enfoque en una publicación anterior que maneja la coincidencia de substrings como un patrón. En esta publicación, utilizaremos la construcción lps (prefijo propio más largo que también es sufijo) del algoritmo KMP , que ayudará a encontrar la coincidencia más larga del prefijo de la string b y el sufijo de la string a. Por lo cual conoceremos el punto de giro , a partir de este punto emparejar los personajes. Si todos los caracteres coinciden, entonces es una rotación, de lo contrario no.
A continuación se muestra la implementación básica del enfoque anterior.
Java
// Java program to check if two strings are rotations // of each other. import java.util.*; import java.lang.*; import java.io.*; class stringMatching { public static boolean isRotation(String a, String b) { int n = a.length(); int m = b.length(); if (n != m) return false; // create lps[] that will hold the longest // prefix suffix values for pattern int lps[] = new int[n]; // length of the previous longest prefix suffix int len = 0; int i = 1; lps[0] = 0; // lps[0] is always 0 // the loop calculates lps[i] for i = 1 to n-1 while (i < n) { if (a.charAt(i) == b.charAt(len)) { lps[i] = ++len; ++i; } else { if (len == 0) { lps[i] = 0; ++i; } else { len = lps[len - 1]; } } } i = 0; // match from that rotating point for (int k = lps[n - 1]; k < m; ++k) { if (b.charAt(k) != a.charAt(i++)) return false; } return true; } // Driver code public static void main(String[] args) { String s1 = "ABACD"; String s2 = "CDABA"; System.out.println(isRotation(s1, s2) ? "1" : "0"); } }
Producción:
1
Complejidad temporal: O(n)
Espacio auxiliar: O(n)
Consulte el artículo completo sobre Comprobar si las strings son rotaciones entre sí o no | Set 2 para más detalles!
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