最长公共子字符串
这是一个非常的经典的动态规划问题。
解题思路:
创建一个二维数组,dp[n][m],其中dp[i][j]表示取到s1[i]和s2[j]时的最大连续子串长度。如果s1[i]等于s2[j]时,dp[i][j]=dp[i-1][j-1]+1。
public class day43 {
public static void main(String[] args) {
String str1="abcdef";
String str2="cdab";
System.out.println(maxCommonLengthOfTwoStr(str1,str2));
}
private static int maxCommonLengthOfTwoStr(String str1,String str2) {
int str1_len=str1.length();
int str2_len=str2.length();
int maxCommonLen=0;
int[][] dp=new int[str1_len][str2_len];
for(int i=0;i<str1_len;i++) {
for(int j=0;j<str2_len;j++) {
if(str1.charAt(i)==str2.charAt(j)) {
if(i>0&&j>0) {
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=1;
}
}
if(maxCommonLen<dp[i][j]) {
maxCommonLen=dp[i][j];
}
}
}
return maxCommonLen;
}
}