Leetcode1071. 字符串的最大公因子(C语言)

本文详细解析了LeetCode上的1071题“字符串的最大公因子”,使用C语言实现。介绍了如何通过辗转相除法求两个字符串的最长公共因子,包括求最大公约数的算法及字符串匹配过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值