一、题目描述
对于字符串 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 同时除尽,那么 ;
再者,如果它们有公因子 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);
}
复杂度分析
- 时间复杂度: ,
- 空间复杂度: ,