72 개 질문 LeetCode : 편집 거리 (어려운)

72 개 질문 LeetCode : 편집 거리 (어려운)

  • 제목 : word1을 사용 word2 변환 작업의 최소 수를 계산하는 단어 1과 word2 두 단어 감안할. 당신은 하나 개의 단어에 다음과 같은 세 가지 작업을 수행 할 수 있습니다 : 문자를 삽입, 문자를 삭제, 문자를 대체

  • 생각은 : 작동, 조금 비교 생각을 시작 ①. 하지만 아이디어는 매우 간단한 예제가 부당들 수있다. ② 다음 나중에 각 문자의 위치에 대해 검색하고 정착 할 다른 장소 조치의 필요가없는 적절한 위치를 선택합니다. 그러나, 몇 가지 문자가 존재할 수 삽입 할 필요가 없을 수 있습니다. 겠어요 - . . 내가하지 않습니다 생각합니다. . . .

  • 아이디어 II : 해석이 제가 필요한 J 비트 전에 단계 word2 word1을 참조되기 전에 DP로 [I]는 [j]가 비트를 나타내고, 동적 프로그래밍의 개념에 주어진다. 마지막으로 한 동일 DP이면 [I] [J] = DP [I-1] [J-1] 마지막으로 한 동일 DP 않을 때 [I] [J] = 분 (DP [I-1] J-1] (DP) [I-1] [J], DP [I] [J-1]) + 1이다. DP는 [I-1] [J-1] 교체 작업, DP를 나타내고, [I-1] [J]를 삭제 DP [I] [J-1]를 나타내는 삽입 동작을 나타낸다. 또한, 단어의 경우가 비어 고려한다.

class Solution {
    public int minDistance(String word1, String word2) {
        int n1 = word1.length();
        int n2 = word2.length();
        int[][] dp = new int[n1 + 1][n2 + 1];
        // 第一行
        for (int j = 1; j <= n2; j++) dp[0][j] = dp[0][j - 1] + 1;
        // 第一列
        for (int i = 1; i <= n1; i++) dp[i][0] = dp[i - 1][0] + 1;

        for (int i = 1; i <= n1; i++) {
            for (int j = 1; j <= n2; 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 - 1], dp[i][j - 1]), dp[i - 1][j]) + 1;
            }
        }
        return dp[n1][n2];  
    }
}

그림 삽입 설명 여기

게시 79 개 원래 기사 · 원 찬양 7 · 전망 1367

추천

출처blog.csdn.net/new_whiter/article/details/104477562