2つの文字列text1とtext2が与えられた場合、これら2つの文字列の最長共通部分列の長さを返します。
文字列のサブシーケンスは、新しい文字列を参照します。これは、文字の相対的な順序を変更せずに、元の文字列から一部の文字を削除する(または文字を削除しない)ことによって形成される新しい文字列です。
たとえば、「ace」は「abcde」のサブシーケンスですが、「aec」は「abcde」のサブシーケンスではありません。2つの文字列の「共通のサブシーケンス」は、2つの文字列によって共有されるサブシーケンスです。
2つの文字列に共通のサブシーケンスがない場合は、0が返されます。
例1:
入力:text1 = "abcde"、text2 = "ace"
出力:3
説明:最長共通部分列は "ace"であり、その長さは3です。
動的計画法
class Solution {
public int longestCommonSubsequence(String text1, String text2) {
int m = text1.length();
int n = text2.length();
int dp[][] = new int[m+1][n+1];
for(int i=1;i<m+1;i++){
for(int j=1;j<n+1;j++){
if(text1.charAt(i-1)==text2.charAt(j-1)){
dp[i][j] = dp[i-1][j-1]+1;
}
else{
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[m][n];
}
}