[文字列] C014_列GCD(最大公約数)

一つ、タイトル説明

对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。

输入:str1 = "ABCABC", str2 = "ABC"
输出:"ABC"

第二に、問題解決

方法の一つ:GCD

GCD:整数の数は、xがaとbの両方割り切れることができるならば、xは最大公約数の、Bであり、X場合。

文字列の場合:xは、bが、その後、同時に割り切れることができた場合 A A P P E n個 D B = = B A P P E n個 D A a.append(B)== b.append()

さらに、それらは共通因子ABと、S1を有しているならば、mは「AB」、S2は、nが「AB」であり、m +一緒にされたn番目の「AB」。

単に最後の部分文字列またはbの長さの最大公約数に戻ります。

public String gcdOfStrings(String s1, String s2) {
  if (s1 == null || s2 == null) {
      return null;
  } else if (!(s1 + s2).equals(s2 + s1)) {
      return "";
  }
  return s1.substring(0, gcd(s1.length(), s2.length()));
}
int gcd (int a, int b) {
  if (a == 0 || b == 0)
      return a == 0 ? b : a;
  return gcd(b, a % b);
}

複雑性分析

  • 時間計算: ザ・ リットル インクルード グラム n個 O(ログ(N))
  • 宇宙の複雑さ: ザ・ 1 O(1)
公開された495元の記事 ウォンの賞賛105 ・は 30000 +を見て

おすすめ

転載: blog.csdn.net/qq_43539599/article/details/104812846