タイトル
文字列SとT、唯一のS = T + ... +時間T(Tは、それ自体に1回以上接続されている)のために、私たちは「T Sを割り切れることができます。」識別しました
戻り値は、最長の文字列X、Xは、要件を満たすことができ、そしてXは割り切れ割り切れstr1はstr2をすることができます。
出典:滞在ボタン(LeetCode)は
すべてのネットワークからの控除が著作権を保有しています。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
問題の解決策
まず、二つの文字列が作られていることを発生SUBSTRING(最大)Xを仮定すると、それは、ストリングSを考えることは容易であり、Tは、X、T = N X番目のXは、S = K繰り返しの列です、 S + T == T + S == (K + N) 番目のX
次いでS + T == T + S、次いで溶液、または空の文字列を直接返さない溶液を示していない場合。
SおよびTは、Xは、それらの最大公約数(書かれた被験者)の最大長さは、Xの倍数であります
コード
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));
}
}
}