Leetcode1071. 字符串的最大公因子(C语言)
题目:
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。例:
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
思路:
辗转相除。先求最大公因子长度;逐个遍历求是否字符相等。
代码:
int gcd(int a,int b){
int n=a%b;
while(n!=0){ //辗转相除求长度的最大公约数,即最大公因子长度
a=b;
b=n;
n=a%b;
}
return b;
}
char * gcdOfStrings(char * str1, char * str2){
int l1=strlen(str1),l2=strlen(str2);
int sum=l1+l2;
char *p=str1,*q=str2;
while(sum){
if(*p==NULL) break; //若有一个字符串遍历到结尾,跳出循环
if(*q==NULL) break;
if((*p)!=(*q)) return ""; //无公因子
p++; //相等则直接开始下一个遍历
q++;
sum--;
}
sum=gcd(l1,l2);
str1[sum]='\0'; //构造子串
return str1;
}