1、 题目描述
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
2、思路分析及代码实现
方法一 :
思路分析:
首先确定是否存在最大公因子:利用string 的equals()函数来判断;
利用求最大公约数的方法计算两个字符串最大公因子的字符串个数
利用string求子串的方法substring() 算最大公因子
代码实现:
class Solution {
public String gcdOfStrings(String str1, String str2) {
if(!(str1+str2).equals(str2+str1))
return "";
int l1=str1.length();
int l2=str2.length();
int res=gcd(l1,l2);
return str1.substring(0,res);
}
public int gcd(int p,int q){
return q==0?p:gcd(q,p%q);
}
}
方法二:更相减损法
思路分析:
1、先使用equals()方法判断是否存在最大公因子;
2、求字符串的最大公因子
*递归方法求解,直到减数和差相等。
代码实现:
class Solution {
public String gcdOfStrings(String str1, String str2) {
if(!(str1+str2).equals(str2+str1))
return "";
return gcd(str1,str2);
}
public String gcd(String s1, String s2){
if(s1.length()==s2.length()){
return s1;
}
if(s1.length()>s2.length()){
s1=s1.substring(s2.length(),s1.length());
return gcd(s1,s2);
}else{
s2=s2.substring(s1.length(),s2.length());
return gcd(s1,s2);
}
}
}
方法三:
可以采用暴力求解法
字符串的最大公因子一定是两个字符串的长度的因数,因此理论上可以一个一个的试,不过开销会比较大。