對於字符串 S
和 T
,只有在 S = T + ... + T
(T
與自身連接 1 次或多次)時,我們才認定 “T
能除盡 S
”。
返回最長字符串 X
,要求滿足 X
能除盡 str1
且 X
能除盡 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);
}
}