目录结构
1.题目
对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
示例:
输入:str1 = "ABCABC", str2 = "ABC"
输出:"ABC"
输入:str1 = "ABABAB", str2 = "ABAB"
输出:"AB"
输入:str1 = "LEET", str2 = "CODE"
输出:""
提示:
- 1 <= str1.length <= 1000
- 1 <= str2.length <= 1000
- str1[i] 和 str2[i] 为大写英文字母
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/greatest-common-divisor-of-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
- 辗转相除法。
public class Solution1071 {
@Test
public void test1071() {
String str1 = "ABABABAB", str2 = "ABAB";
System.out.println(gcdOfStrings(str1, str2));
}
public String gcdOfStrings(String str1, String str2) {
if ((str1 + str2).equals(str2 + str1)) {
int len1 = str1.length(), len2 = str2.length();
int m = Math.max(len1, len2), n = Math.min(len1, len2);
while (n != 0) {
int t = m % n;
m = n;
n = t;
}
return str1.substring(0, m);
}
return "";
}
}