1. 題目
2. 解題思路
滿足題目要求的子串長度爲兩個字符串長度的最大公因數gcd
計算最大公因數gcd
,若兩個字符串以gcd
爲週期,且前gcd
字符相同
則前gcd
字符爲題解
PS: 如果str1 + str2 == str2 + str1
則一定有公因子
輾轉相除法:
兩個數的最大公約數等於它們中較小的數和兩數之差的最大公約數。
3. 代碼
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
int gcd = 0;
int a = str1.size();
int b = str2.size();
// 輾轉相除法
while(a != b){
// cout<<a<<" "<<b<<endl;
if(a < b){
b = b - a;
}else if(a > b){
b = a - b;
a = - (b - a);
}
}
// 最大公因數
gcd = a;
// cout<<gcd<<endl;
// 校驗
// for(int i = 0; i < gcd; i++){
// if(str1[i] != str2[i]){
// return "";
// }
// }
// for(int i = gcd; i < str1.size(); i++){
// if(str1[i] != str1[i - a]){
// return "";
// }
// }
// for(int i = gcd; i < str2.size(); i++){
// if(str2[i] != str2[i - a]){
// return "";
// }
// }
if(str1 + str2 != str2 + str1){
return "";
}
return str1.substr(0, gcd);
}
};