每日一練,字符串的最大公因子(輾轉相除法)

對於字符串 ST,只有在 S = T + ... + TT 與自身連接 1 次或多次)時,我們才認定 “T 能除盡 S”。

返回最長字符串 X,要求滿足 X 能除盡 str1X 能除盡 str2

示例 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] 爲大寫英文字母

這道題直接把我一下看懵了,後來看了下評論,才發現有輾轉相除法這個東東(捂臉),後來百度了下,終於搞懂了這個方法。
輾轉相除法,當求兩個數的最大公因子的時候,就舉個例子,求92和64的最大公因子m,那麼先判斷較小的那個64是否爲零,如果不爲,那麼就將92除以64取餘,等於28,(因爲如果92和64能被m整除,那麼28也一定能被m整除)再比較28是否爲零,不爲零,就將64除以28取餘,等於36……就這麼一直除下去,一直到4和0,那麼就b等於零滿足條件了,那麼4就是92和64的最大公因子。附上代碼:

class Solution {
    public String gcdOfStrings(String str1, String str2) {
    	//如果str1+str2字符串和str2+str1字符串如果不相等的話,必定不會有公因子
        if(!(str1+str2).equals(str2+str1)){
            return "";
        }else{
            return str1.substring(0,gcd(str1.length(),str2.length()));
        }
    }
	//輾轉相除法的具體實現過程
    private int gcd(int a,int b){
        return b == 0?a : gcd(b, a%b);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章