[デイリーシリーズのタイトル]最大公約数のLeetCode 1071文字列

タイトル

文字列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));
      }
  }
}

おすすめ

転載: www.cnblogs.com/JethroYu/p/12467001.html