其實最開始我的思路是找到str1和str2的最小週期串,然後比較比較兩個週期串是否相等,當然如果某個沒有周期的話直接返回空串。
後來看了一下題解,感覺學到了。。。。啊哈哈哈哈!
大致思路如下:
1.str1是由m個str組成的,str2是由n個str組成的,那麼m+n個str就等於n+m個str,所以只要判斷str1+str2==str2+str1就能判斷它是否具有最大公因子.
2.如果第一步滿足了,那麼我們直接求一串和二串長度的最大公約數,然後去一串(或二串)的前綴就可以了。
代碼如下:
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
if(str1+str2!=str2+str1) return "";
int len1=str1.size(),len2=str2.size();
int len=gcd(len1,len2);
return str1.substr(0,len);
}
int gcd(int a,int b) {return !b?a:gcd(b,a%b);}
};