本帖最后由 liusonglin 于 2016-8-3 12:39 编辑
[Java] 纯文本查看 复制代码 /*
* 注:此程序在公共子字符串长度为1的情况下,会出现下例中的现象。
*
* 例:"abbbbbbc"和"addddc" 的结果为a(严格来说a和c都应该算作公共子字符串).
*/
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串的个数:");
int num = Integer.parseInt(sc.nextLine());
// 该数组用于存储键盘录入的字符串
String[] arr = new String[num];
// 该数组用于备份字符串
String[] arr2 = new String[num];
// 存储字符串
for (int x = 0; x < num; x++) {
System.out.println("请输入第" + (x + 1) + "个字符串:");
String s = sc.nextLine();
arr[x] = s;
arr2[x] = s;
}
// 获取所有字符串的公共子字符串
String commonString = getAllCommonString(arr);
System.out.println("您输入的字符串为:");
// 遍历数组
for (String s : arr2) {
System.out.println(s);
}
// 考虑到可能没有公共子字符串
if (commonString.isEmpty()) {
System.out.println("没有公共的子字符串.");
} else {
System.out.println("这些字符串的最大公共子字符串为:" + commonString);
}
}
// 这是获取多个字符串中的最大公共子字符串的方法
public static String getAllCommonString(String[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
arr[x + 1] = getCommonString(arr[x], arr[x + 1]);
}
return arr[arr.length - 1];
}
// 这是获取两个字符串的最大公共子字符串的方法
public static String getCommonString(String str1, String str2) {
String max = str1.length() > str2.length() ? str1 : str2;
String min = max == str1 ? str2 : str1;
for (int x = 0; x < min.length(); x++) {
for (int start = 0, end = min.length() - x; end <= min.length(); start++, end++) {
String sub = min.substring(start, end);
if (max.contains(sub)) {
return sub;
}
}
}
// 这里不返回null的原因是为了避免空指针异常
// 如果确实没有公共子字符串则返回的内容为空
String s = "";
return s;
}
}
|