今天在做LeetCode的时候遇到
解析:
这个问题的本质就是求str1和str2的最大公约数。由题目的描述可以看出满足题目描述的字符串X其实就是str1和str2的最大公约数。
那示例二举例
设x=AB
则str1=3x,str2=2x;
题目就演变成求3x和2x的最大公约数。
而求最大公约数的最好办法就是欧几里得算法
采用递归的思想来计算x
class Solution {
public String gcdOfStrings(String str1, String str2) {
if (!(str1+str2).equals(str2+str1)){
return "";
}
return str1.substring(0,gcd(str1.length(),str2.length()));
}
private static int gcd(int a, int b){
return b==0?a:gcd(b,a%b);
}
}
画了一个大致草图
递归的思想还是很重要的。