今天刷题遇到了这个题,看到官方题解,实在是太巧妙了,前来记录一下
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
例如
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
输入:str1 = “ABABAB”, str2 = “ABAB”
输出:“AB”
小弟看到之后只想到了暴力枚举,可是在题解里面看到了这种思路
如果 str1+str2 =str2+str1 那么一定有解,否则无解。
然后就通过长度求最小公约数即可,
说起公约数 ,之前另一篇文章有过模板,点击直达
class Solution {
public String gcdOfStrings(String str1, String str2) {
if(!(str1+str2).equals(str2+str1)){
return "";
}else{
return str1.substring(0,gcd(str1.length(),str2.length()));
}
}
public int gcd(int a,int b){
if(a<b)return gcd(b,a);
if(a==b)return a;
if((a&1)==0 && (b&1)==0)return gcd(a>>1,b>>1)<<1;
else if((a&1)==0)return gcd(a>>1,b);
else if((b&1)==0)return gcd(a,b>>1);
else return gcd(b,a-b);
}
}