título
Para strings S e T, apenas a S = T + ... + T tempo (T ligado a si próprio uma ou mais vezes), identificamos "T S pode ser divisível."
Retorna a mais longa seqüência de X, X pode cumprir as exigências, e X pode ser divisível str2 str1 divisível.
Fonte: botão estadia (LeetCode)
estão protegidas por copyright dedução de todas as redes. reimpressão comercial entre em contato com a reimpressão autorizado oficial, não-comercial por favor, indicar a fonte.
solução do problema
Em primeiro lugar, partindo do princípio que um duas cadeias são feitos (e para cima) X subcadeia gerado, então é fácil de pensar de cordas S e T são sequências de repetição de X, então s = k th X, T n = Xa, o S + T == T + == S (k + n) th X
, em seguida, se S + T == T + S, em seguida, uma solução, ou cadeia vazia é retornada directamente indica que não há solução.
S e T são, em seguida, múltiplos de X, X é o comprimento máximo da sua maior divisor comum (o assunto 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));
}
}
}