常见的子串问题
在我们学习一门新的语言时,例如c或者java时,我们不太熟习怎么去进行数据在字符串层次上的比较,比如常见的问题有最大公共子串,我们可以尝试采用
类似于一个二维数组的形式来进行字符串的比较,得出最大公共子串,那么这里就演示一下
比如:"abcde"和"abc"这个字符串的比较,可能你会觉得这个子串很短,一眼就可以看出来,当然我这里只是演示直观
如果你有更长的字符串不妨可以尝试一下。
这里采用的是一个二维数组的形式比较是否相等 如果相等就让其中的值为1,那么如果连续相等怎么办,自然是斜对角+1=得到当前
的相等数目 这样可以更好的进行比较 下面是代码
import java.util.ArrayList; //重复的长度 //重复的段落为 public class Test2A { private static ArrayList<Character> array =new ArrayList<Character>(); public static void main(String[] args) { String A="abcdefhijk"; String B="abcd"; fun(A,B); } private static void fun(String a, String b) { char[] arr1=a.toCharArray(); char[] arr2=b.toCharArray(); int[][] test=new int[arr1.length+1][arr2.length+1]; int max=0; int maxi=0; for(int i=1;i<arr1.length+1;i++){ for(int j=1;j<arr2.length+1;j++){ if(arr1[i-1]==arr2[j-1]){ test[i][j]=test[i-1][j-1]+1; } if(max<test[i][j]){ max=test[i][j]; maxi=i-1; } } } for(int i=maxi-max+1,n=max;n>0&&i<arr1.length;n--,i++){ array.add(arr1[i]); } System.out.println("长度为:"+max); System.out.println(array.toString()); } }
恐惧源于无知,代码改变世界