求解两个字符串的最大字串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* Return the max substring for two strings
*
* @param str1
* @param str2
*
*/
public static String maxSubString(String str1, String str2) {
String str = new String();
// Make the long string str1, the other str2
if (str1.length() < str2.length()) {
String temp = str1;
str1 = str2;
str2 = temp;
}
// if the long string contains short string, return short string
if (str1.contains(str2))
return str2;

// From the longest specified length string, match it, from left to right.
for (int i = str2.length() - 1; i >= 0; i--) {
for(int j = 0; (j + i) <str2.length() ; j ++) {
// if match successfully, return it
str = str2.substring(j, j+i);
if(str1.contains(str))
return str;
}
}
return str;
}
}

思路

  1. 现根据两个字符串的长度交换两个字符串,用短的进行判断。
  2. 如果较长的字符串包含较短的字符串,则返回短的字符串
  3. 将短字符串的长度开始,进行一段一段的匹配,从长度长的开始,可以找到最长的子字符串。