寻找两个字符串之间的最大公共字符串
利用二维数组将两个字符串的每个元素与另一字符串的每个元素进行一一对应来记录相同元素,找出二维数组中存在的最大值就是最大公共字符串的长度,对应的下标就是其结束位置
import java.util.Scanner;
public class practice7 {
public static int[][] transProblem(String str1,String str2){
//用于建立二维数组
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
int[][] contain = new int[s1.length][s2.length];
for(int i = 0;i < s2.length;i++){
if (s1[0] == s2[i]){
contain[0][i] = 1;
}
}
for(int j = 0;j < s1.length;j++){
if (s1[j] == s2[0]){
contain[j][0] = 1;
}
}
for (int m = 1;m < s1.length;m++){
for (int n = 1;n< s2.length;n++){
if (s1[m] == s2[n]){
contain[m][n] = contain[m-1][n-1] + 1;
}
}
}
return contain;
}
public static String theSame(String str1,String str2){
//找出最大值及对应下标进行返回
int i,j;
String str;
int[][] arr = transProblem(str1,str2);
int max = 0;
int position = 0; //记录最大字符串终止位置
for (i = 0;i < arr.length;i++){
for (j = 0;j < arr[i].length;j++){
if (arr[i][j] > max){
position = j;
max = arr[i][j];
}
}
}
str = str2.substring(position-max+1,position+1);
return str;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个字符串");
String str1 = scanner.nextLine();
System.out.println("请输入第二个字符串");
String str2 = scanner.nextLine();
System.out.print(theSame(str1,str2));
}
}
运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210102142139279.png)