[アルゴリズム]Java/バックエンド/LCS/9251
[アルゴリズム]Java/バックエンド/LCS/9251
質問する
質問リンク
方法
LCSアルゴリズムの式は次の通りです.
画像ソース文字列1および2は、それぞれ、長さ+1を行および列とする2次元配列 を作成する.0行と0列の値は0 です.第1列は、2文字列の文字 の比較を開始する.各文字が同じ場合、行-1と列-1の値を現在位置で1に加算します. 各文字が異なる場合、現在値において、現在位置である前の行の値と前の列の値のうちの大きい値を に入れる.
4行目は、文字列1のn文字と文字列2のm文字が同じであれば、文字列1のn−1文字と文字列2のm−1文字との間の最長共通部分数列の長さに1を加算することを意味する.
5行目の意味は、現在の文字列1のn文字と文字列2のm文字が異なるため、これまでで最も長い共通部分数列長の大きな値を現在の値に入れる
コード#コード#
質問する
質問リンク
方法
LCSアルゴリズムの式は次の通りです.
画像ソース
4行目は、文字列1のn文字と文字列2のm文字が同じであれば、文字列1のn−1文字と文字列2のm−1文字との間の最長共通部分数列の長さに1を加算することを意味する.
5行目の意味は、現在の文字列1のn文字と文字列2のm文字が異なるため、これまでで最も長い共通部分数列長の大きな値を現在の値に入れる
コード#コード#
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_9251_baekjoon {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1 = " "+ br.readLine();
String str2 = " "+ br.readLine();
int row = str1.length();
int col = str2.length();
int[][] dp = new int[row][col];
int len = 0;
for(int i =1; i<row; i++) {
for(int j=1; j<col; j++) {
if(str1.charAt(i) == str2.charAt(j)) {
dp[i][j] = dp[i-1][j-1] + 1;
}
else {
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
}
len = Math.max(len, dp[i][j]);
}
}
System.out.println(len);
}
}
Reference
この問題について([アルゴリズム]Java/バックエンド/LCS/9251), 我々は、より多くの情報をここで見つけました https://velog.io/@gandi0330/알고리즘-Java-백준-LCS-9251テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol