一つ、タイトル説明
对于字符串 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が、その後、同時に割り切れることができた場合 。
さらに、それらは共通因子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);
}
複雑性分析
- 時間計算: 、
- 宇宙の複雑さ: 、