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)
1 class Solution { 2 public String gcdOfStrings(String str1, String str2) { 3 return GCD(str1, str2); 4 } 5 public String GCD(String a, String b) { 6 if(a.length() > b.length()) { 7 for(int i = 0; i < b.length(); i++){ 8 if(b.charAt(i) != a.charAt(i)){ 9 return ""; 10 } 11 } 12 String temp = a.substring(b.length()); 13 return GCD(temp,b); 14 } 15 else if(b.length() > a.length()) 16 return GCD(b, a); 17 else 18 return a.equals(b) ? a : ""; 19 } 20 }