leetcode:Edit Distance 편집 거리

1391 단어 leetcode
경전의 dp제목
제목의 뜻은 단어word1과 단어word2를 제시하는 것이다. 우리는 세 가지 방식으로 단어word1을 word2로 바꿀 수 있다. 세 가지 방식은 다음과 같다.
1 문자 삽입
2 문자 하나 삭제
3 문자 대체
-- 워드1에서 워드2로 전환하는 최소 절차는 얼마인가.
먼저 상태 DP[i][j]를 정의하고, DP[i][j]는 단어 1word1[1~i]을 단어 2word[1~j]로 바꾸는 최소 절차를 DP[i][j]로 표시한다.
그러면 우리는 상태 이동 방정식을 얻어낼 수 있다.
워드1의 마지막이 워드2의 마지막과 같을 때.
DP[i][j] = DP[i - 1][j-1];그러니까 이런 식으로 바꿀 필요가 없다는 거예요.
마지막에 다를 때.
그러면 있을 거예요.
DP[i][j] = DP[i ][j - 1] +1;문자 삽입
DP[i][j] = DP[i - 1][j]  + 1;문자 삭제
DP[i][j] = DP[i - 1][j - 1] +1;문자 대체
그러면 DP[i][j]는 최소로 하는 거예요.
public class Solution {
    public int minDistance(String word1, String word2) {
        int[][] dp = new int[word1.length() + 1][word2.length() + 1];
        for(int i = 0; i <= word1.length(); ++i){
            dp[i][0] = i;
        }
        for(int i = 0; i <= word2.length(); ++i){
            dp[0][i] = i;
        }
        for(int i = 1; i <= word1.length(); ++i){
            for(int j = 1; j <= word2.length(); ++j){
                if(word1.charAt(i - 1) == word2.charAt(j - 1)){
                    dp[i][j] = dp[i - 1][j - 1];
                }
                else{
                    dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i - 1][j - 1]) , dp[i][j  - 1]) + 1;
                }
            }
        }
        return dp[word1.length()][word2.length()];
    }
}

좋은 웹페이지 즐겨찾기