[アルゴリズム]Java/標準/共通部分文字列/5582


[アルゴリズム]Java/標準/共通部分文字列/5582


質問する
質問リンク
方法
2 D配列を作成し、1番目の文字列の長さと2番目の文字列の長さを行列とし、各セルで1番目の文字列の文字と2番目の文字列の文字を比較します.同時に、前の行、前の列の値に1を加えた値を現在の値に格納します.
if str.char(i) == str.char(j) => dp[i][j] = dp[i-1][j-1]
この式は、文字列1と2を比較することを意味し、文字列1のiの最初の文字と文字列2のjの2番目の文字が同じである場合、各文字列は前の文字の共通部分の文字列長に1を加えて現在の文字に格納される
コード#コード#
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main_5582 {
    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[][] dp = new int[str1.length()][str2.length()];
    	
    	int max = 0;
    	for(int i=1;i<str1.length();i++) {
    		for(int j=1;j<str2.length();j++) {
    			if(str1.charAt(i) == str2.charAt(j)) {
    				dp[i][j] = dp[i-1][j-1] + 1;
    				max = Math.max(dp[i][j], max);
    			}
    		}
    	}
    	
    	System.out.println(max);
    }
}