título
Para las cadenas S y T, sólo el S = T + ... + tiempo T (T conectado a sí mismo una o más veces), se identificaron "T S puede ser divisible."
Devuelve la cadena más larga X, X puede cumplir con los requisitos, y X puede ser divisible str2 str1 divisible.
Fuente: Botón de estancia (LeetCode)
son propiedad de la deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.
solución del problema
En primer lugar, suponiendo que están hechas a dos cadenas (y hasta) X subcadena generado, entonces es fácil pensar en cadenas de S y T son cadenas de repetición de X, entonces S = k-ésima X, T = n X a, la S + T == T + S == (k + n) º X
entonces si S + T == T + S, a continuación, una solución, o cadena vacía se devuelve directamente indica que no hay solución.
S y T son entonces múltiplos de X, X es la longitud máxima de su máximo común divisor (el sujeto escrito)
código
public class Solution {
public String gcdOfStrings(String str1, String str2) {
if ((str1+str2).equals(str2+str1))
return str1.substring(0,GCD(str1.length(),str2.length()));
else
return "";
}
public int GCD(int a,int b)
{
if(a==0) return b;
if(b==0) return a;
if(!(a%2==1)&&!(b%2==1))
{
return GCD(a>>1,b>>1)<<1;
}
else if(!(b%2==1))
{
return GCD(a,b>>1);
}
else if(!(a%2==1))
{
return GCD(a>>1,b);
}
else
{
return GCD(Math.abs(a-b),Math.min(a,b));
}
}
}