1. 写一个算法查找两个字符串中公共最大的字符串。(要求:低时间复杂度)
如: abcdefabcd abefabghi 找出: efab
import java.util.Scanner;
import java.util.Stack;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str1 = in.next();
String str2 = in.next();
System.out.println(longestSubStr(str1, str2));
}
public static String longestSubStr(String str1, String str2) {
String longestSubStr = "";
String subStr = "";
Boolean tag = false;
for (int i = 0; i < str1.length(); ) {
for (int j = 0; j < str2.length() && i < str1.length();) {
if (str1.charAt(i) == str2.charAt(j)) {
subStr = subStr + str1.charAt(i);
i++;
j++;
tag = true;
} else {
int k = 0;
if (tag) {
while (j < str2.length()) {
for (; k < subStr.length() && subStr.charAt(k) == str2.charAt(j);) {
k++;
j++;
}
if (k == subStr.length() && str1.charAt(i) == str2.charAt(j)) {
subStr = subStr + str2.charAt(j);
i++;
j++;
} else {
j++;
}
}
} else {
j++;
}
}
}
if (subStr.length() > longestSubStr.length()) {
longestSubStr = subStr;
}
if (!tag) {
i++;
}
tag = false;
subStr = "";
}
return longestSubStr;
}
}