【字符串】C014_字符串的最大公因子(最大公约数)

一、题目描述

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

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

二、题解

方法一:gcd

最大公因子:假如有整数数 x,如果 x 可以把 a 和 b 同时除尽,则表示 x 是 a,b 的最大公因子。

对于字符串:如果 x 可以把 a,b 同时除尽,那么 a . a p p e n d ( b ) = = b . a p p e n d ( a ) a.append(b) == b.append(a)

再者,如果它们有公因子 ab,那么 s1 是 m 个 “ab”,s2 是 n 个 “ab”,连起来就是 m+n 个 “ab”。

最后只需返回 a 或 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);
}

复杂度分析

  • 时间复杂度: O ( l o g ( n ) ) O(log(n))
  • 空间复杂度: O ( 1 ) O(1)
发布了495 篇原创文章 · 获赞 105 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43539599/article/details/104812846