Leetcode 1143. Longest Common Subsequence
题目链接: Longest Common Subsequence
难度:Mdium
题目大意:
求两个字符串的最长公共子串的长度,比如"ace"是“abcde”的子串。
思路:
动态规划。
代码
class Solution {
public int longestCommonSubsequence(String word1, String word2) {
int m=word1.length(),n=word2.length();
int[][] dp=new int[m+1][n+1];
//dp[i][j]表示word1从头取到第i个字符,word2从头取到第j个时,
//这两个字符串的最长公共子序列(不需要连续)的长度
for(int i=0;i<m+1;i++){
for(int j=0;j<n+1;j++){
if(i==0||j==0){
dp[i][j]=0;
continue;
}
if(word1.charAt(i-1)==word2.charAt(j-1)){//word1的第i个字符串为wodrd1.charAt(i-1)
dp[i][j]=1+dp[i-1][j-1];
}
else{
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[m][n];
}
}