lc1071 Greatest Common Divisor of Strings
找两个字符串的最长公共子串
假设:str1.length > str2.length
因为是公共子串,所以str2一定可以和str1前面一部分匹配上,否则不存在公共子串。
所以我们比较str2和str1的0~str2.length()-1部分,
若不同,则直接返回””,不存在公共子串。
若相同,继续比较str2和str1的剩下部分,这里就是递归了,调用原函数gcd(str2, str1.substring(str2.length))
还有一些细节:
比如保证str1永远>str2,可以用一个if(str1 < str2){swap(str1, str2)}
str1 == str2 直接检查 str1.equals(str2)
class Solution {
public String gcdOfStrings(String str1, String str2) {
return GCD(str1, str2);
}
public String GCD(String a, String b) {
if(a.length() > b.length()) {
for(int i = 0; i < b.length(); i++){
if(b.charAt(i) != a.charAt(i)){
return "";
}
}
String temp = a.substring(b.length());
return GCD(temp,b);
}
else if(b.length() > a.length())
return GCD(b, a);
else
return a.equals(b) ? a : "";
}
}