您好,欢迎来到汇意旅游网。
搜索
您的当前位置:首页算法练习-LeetCode1071. Greatest Common Divisor of Strings

算法练习-LeetCode1071. Greatest Common Divisor of Strings

来源:汇意旅游网

 这道题一开没有想出来就直接放弃看别人的做法,看完之后才发现难怪自己想不粗来。真的不看别人的思路,直接看代码都看不懂😭。

参考的之后写的解题代码如下:

class Solution {
    public String OfStrings(String str1, String str2) {

        if(!(str1+str2).equals(str2+str1)){
            return "";
        }
        int  = getGcd(str1.length(),str2.length());

        return str1.substring(0,);
        
    }
    
    public int getGcd(int a , int b){
        if(b == 0) return a;
        return getGcd(b,a%b);
    }

}

思路:

(1)Corner Case:两个String 要有 Greatest Common Divisor(GCD)的话,左边右边拼接起来都应该是完全一样的,不能存在不同的情况:

"ABCEABCEABCE" + "ABCE" = "ABCEABCEABCEABCE"

"ABCE" + "ABCEABCEABCE" = "ABCEABCEABCEABCE"

如果存在不同的情况,就不存在最大GCD:

"ABAB" + "BB" = "ABABBB"

"BB" + "ABAB" = "BBABAB"

(2)存在GCD的情况下,如下其GCD的长度是两个String长度的最大公因子:

"ABCEABCEABCE" + "ABCE" = "ABCEABCEABCEABCE"

               12                        4                 ->      4 (最大公因子 = GCD长度)

"ABCE" + "ABCEABCEABCE" = "ABCEABCEABCEABCE"

通过递归找到GCD长度:

 public int getGcd(int a , int b){
        if(b == 0) return a;
        return getGcd(b,a%b);
    }

然后通过找到的GCD长度substring其中任意一个string就能找到GCD。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- hids.cn 版权所有 赣ICP备2024042780号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务