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);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章