Dadas dos strings s1 y s2, escriba un fragmento para verificar si s2 es una rotación de s1. Las strings pueden contener duplicados.
Ejemplos:
Input : s1 = "ABCD", s2 = "CDAB" Output : True String s1 is rotation of s2. Input : s1 = "ABAD", s2 = "ADAB" Output : True Input : s1 = ABCD, and s2 = ACBD Output : False
Una solución simple es buscar la primera aparición de s1 en s2. Para cada coincidencia, verifique si la string restante coincide circularmente.
Una solución eficiente es concatenar s1 consigo mismo. s2 es una rotación de s1 si y solo si es una substring de la string rotada. En Java, podemos usar string contains o indexOf para verificar la substring.
// Java program to check if two given strings are // rotations of each other class StringRotation { /* Function checks if passed strings (str1 and str2) are rotations of each other */ static boolean areRotations(String str1, String str2) { // There lengths must be same and str2 must be // a substring of str1 concatenated with str1. return (str1.length() == str2.length()) && ((str1 + str1).contains(str2)); } // Driver method public static void main(String[] args) { String str1 = "AACD"; String str2 = "ACDA"; if (areRotations(str1, str2)) System.out.println("Yes"); else System.out.printf("No"); } }
Producción:
Yes