纯暴力
/*
* @lc app=leetcode id=1071 lang=cpp
*
* [1071] Greatest Common Divisor of Strings
*/
// @lc code=start
class Solution {
public:
bool check(string str, int k){
int N = str.length();
for(int i=0;i<N/k;i++){
for(int j=1;j<k;j++){
if(str[i] != str[i+j*N/k]){
return false;
}
}
}
return true;
}
void solve(string str, vector<string>& subStr){
int N = str.length();
subStr.push_back(str);
int k = 2;
while( k <= N ){
if( N%k == 0 && check(str, k)){
subStr.push_back(str.substr(0, N/k));
}
k++;
}
subStr.push_back("");
return ;
}
string gcdOfStrings(string str1, string str2) {
int N = str1.size();
int M = str2.size();
vector<string> subStr1, subStr2;
solve(str1, subStr1);
solve(str2, subStr2);
int ansL = 0;
string ansStr;
for(int i=0;i<subStr1.size();i++){
for(int j=0;j<subStr2.size();j++){
if(subStr1[i] == subStr2[j] && subStr1[i].length() > ansL){
ansL = subStr1[i].length();
ansStr = subStr1[i];
}
}
}
return ansStr;
}
};
// @lc code=end