[每日一题系列] LeetCode 1071. 字符串的最大公因子
JethroYu 人气:0题目
对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。 返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。 来源:力扣(LeetCode) 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解
首先假设这两个字符串都是由一个(且最长)子串X生成的,那么很容易想到S串和T串都是X的重复,则S=k个X,T=n个X,则S+T == T+S == (k+n)个X 则如果S+T == T+S,则有解,否则直接返回空串表示无解。 然后S和T都是X的倍数,则最长X为他们长度的最大公因子(题目都写了)代码
```java public class Solution { public String gcdOfStrings(String str1, String str2) { if ((str1+str2).equals(str2+str1)) return str1.substring(0,GCD(str1.length(),str2.length())); else return ""; } public int GCD(int a,int b) { if(a==0) return b; if(b==0) return a; if(!(a%2==1)&&!(b%2==1)) { return GCD(a>>1,b>>1)<<1; } else if(!(b%2==1)) { return GCD(a,b>>1); } else if(!(a%2==1)) { return GCD(a>>1,b); } else { return GCD(Math.abs(a-b),Math.min(a,b)); } } } ```加载全部内容