Pregunta de la entrevista: compruebe si una cadena es una rotación de otra cadena [cerrado]
A un amigo mío le hicieron la siguiente pregunta hoy en una entrevista para el puesto de desarrollador de software:
Dadas dos cadenas s1
, ¿ s2
cómo comprobará si s1
es una versión rotadas2
de ?
Ejemplo:
Si s1 = "stackoverflow"
entonces las siguientes son algunas de sus versiones rotadas:
"tackoverflows"
"ackoverflowst"
"overflowstack"
donde as no"stackoverflwo"
es una versión rotada.
La respuesta que dio fue:
Tome
s2
y encuentre el prefijo más largo que sea una subcadena des1
, que le dará el punto de rotación. Una vez que encuentre ese punto, rompas2
en ese punto para obteners2a
ys2b
, luego simplemente verifique siconcatenate(s2a,s2b) == s1
Nos parece una buena solución a mí y a mi amigo. Pero el entrevistador pensó lo contrario. Pidió una solución más sencilla. Por favor ayúdame diciéndome ¿cómo harías esto Java/C/C++
?
Gracias de antemano.
Primero asegúrate s1
de que s2
sean del mismo largo. Luego verifique si s2
hay una subcadena s1
concatenada con s1
:
algorithm checkRotation(string s1, string s2)
if( len(s1) != len(s2))
return false
if( substring(s2,concat(s1,s1))
return true
return false
end
En Java:
boolean isRotation(String s1,String s2) {
return (s1.length() == s2.length()) && ((s1+s1).indexOf(s2) != -1);
}
Seguramente una mejor respuesta sería: "Bueno, le preguntaría a la comunidad de stackoverflow y probablemente tendría al menos 4 respuestas realmente buenas en 5 minutos". El cerebro es bueno y todo eso, pero valoraría más a alguien que sepa cómo trabajar con otros para encontrar una solución.