题目:1071.字符串的最大公因子

文章讨论了一道LeetCode上的编程问题,涉及求解两个字符串的最小循环单元并判断它们是否为最大公因子。作者提供了解题思路和代码实现,包括求解最小公倍数、去重字符串以及计算最大公约数的函数。初始尝试有误后,修正为正确方法,官方题解列举了三种不同解决方案。
摘要由CSDN通过智能技术生成

题目来源:

        leetcode题目,网址:1071. 字符串的最大公因子 - 力扣(LeetCode)

解题思路:

        求出两字符串的最小循环单元,判断是否相等。若相等,将最小循环单元重复 x 次使得其长度为 两字符串长度的最小公倍数,若不相等,返回 ""。

解题代码:

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        String newStr1=deduplicate(str1);
        String newStr2=deduplicate(str2);
        String min=newStr1.equals(newStr2)?newStr1:"";
        if(min.equals("")){
            return min;
        }
        int gcd=forGCD(str1.length(),str2.length());
        String res="";
        for(int i=0;i<gcd/min.length();i++){
            res+=min;
        }
        return res;
    }

    public int forGCD(int x,int y){
        return x==0?y:forGCD(y%x,x);
    }

    public String deduplicate(String str){
        StringBuffer res=new StringBuffer(str);
        for(int i=1;i<=str.length()/2;i++){
            if(res.length()%i!=0){
                continue;
            }
            StringBuffer temp=new StringBuffer(str.substring(0,i));
            StringBuffer addAll=new StringBuffer();
            for(int j=0;j<res.length()/i;j++){
                addAll.append(temp);
            }
            if(addAll.toString().equals(str)){
                
                res=temp;
                break;
            }
        }
        return res.toString();
    }
}
 

总结:

        刚开始求的是满足要求的最短字符串,后面发现不对,改了。

        官方题解给出了三种解法。第一种枚举所有可能前缀,返回最长的。第二种,判断两字符串的最大公约数前缀是否符合要求。第三种,通过 比较 str1+str2 与 str2+str1 是否相等判断是否存在,若存在,返回最大公约数前缀,否则,返回 ""。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值