JAVA编程练习--力扣:字符串的最大公因数

1.题目
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/greatest-common-divisor-of-strings

示例 1:
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
示例 2:
输入:str1 = “ABABAB”, str2 = “ABAB”
输出:“AB”
示例 3:
输入: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.思路
首先,有一个思路,那就是如果要找出最大长度x满足 X 能除尽 str1 且 X 能除尽 str2,则满足str1+str2=str2+str1,那么就变成了求str1的长度和str2的长度的最大公因数的问题,采用辗转相除法。
辗转相除法:
while(number2 !=0)
余数 a = max number1/min number2
number1 = number2
number2 = a

3.代码

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        if (!(str1 + str2).equals(str2 + str1)) return "";
        int len1 = str1.length(), len2 = str2.length();
        if (len1>len2) {
            while (len2 != 0) {
                int rem = len1 % len2;
                len1 = len2;
                len2 = rem;
            }
            return str2.substring(0, len1);
        } else {
            while (len1 != 0) {
                int rem = len2 % len1;
                len2 = len1;
                len1 = rem;
            }
        }
        return str2.substring(0, len2);
    }
}

你可能感兴趣的:(JAVA,算法)