/*
* 算法思想:
* 暴力匹配,从最长开始,找到合适的返回。
*
*/
bool check(char *s1, int len1, char *s2, int len2){
if(len1 % len2 != 0){
return false;
}
int i;
for(i=0; i<len1/len2; i++){
if(memcmp(s1+i*len2, s2, len2)){
return false;
}
}
return true;
}
int get_len(char *s){
int i=0;
while(*s++ != 0)
i++;
return i;
}
char * gcdOfStrings(char * str1, char * str2){
int i=0, len= 0;
int len1 = get_len(str1);
int len2 = get_len(str2);
char *max_addr;
char *min_addr;
int max = len1>len2 ? len1 : len2;
int min = len1<len2 ? len1 : len2;
if(max == len1){
max_addr = str1;
min_addr = str2;
}else{
max_addr = str2;
min_addr = str1;
}
len = min;
while(len>=1){
if(len1 % len!=0 || len2%len!=0) {
len--;
continue;
}
if(check(max_addr, max, max_addr, len) && check(max_addr, min, min_addr, len)){
max_addr[len] = 0;
return max_addr;
}
len--;
i++;
}
max_addr[0] = 0;
return max_addr;
}