leetcode -- Edit Distance - 중점 dp

2625 단어 LeetCode
https://leetcode.com/problems/edit-distance/
여기 dp[i, j], i와 j는 개수로 보고 index로 보지 마세요.그래서 dp[i, j]의 뜻은word1의 앞 i자모와word2 앞 j자모의 edit distance이다.이곳은 가장 긴 공공 서열의 사고방식과 같다.
dp[i, j]에 대해 여기는 dp[i, j-1]에 알파벳을 붙이거나 dp[i-1, j]에 알파벳을 붙이거나 d[i-1, j-1]+1을 붙이면word1[i]이 된다!word2[j]일 때 dp[i-1, j-1]는word1[i]=word2[j]이다.
즉dp[i][j-1] + 1, j에 대응하는 delete 조작 dp[i-1] [j] + 1, i에 대응하는 delete 조작 dp[i-1] [j-1] + (0 if word1 [i]! = word2 [j] else 1, replace 또는 replace 조작 없음
세 가지 조작에서 출발하면 됩니다. 여기는 insert 조작을 고려하지 않습니다.
dp[i,j] = min(dp[i][j-1] + 1, dp[i-1][j] + 1, dp[i-1][j-1] + (0 if word1[i] == word2[j] else 1))
참고 자료http://www.cnblogs.com/zuoyuan/p/3773134.html http://zhangbuhuai.com/2015/05/23/edit-distance/#
class Solution:
    # @return an integer
    def minDistance(self, word1, word2):
        m=len(word1)+1; n=len(word2)+1
        dp = [[0 for i in range(n)] for j in range(m)]
        for i in range(n):
            dp[0][i]=i
        for i in range(m):
            dp[i][0]=i
        for i in range(1,m):
            for j in range(1,n):
                dp[i][j]=min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+(0 if word1[i-1]==word2[j-1] else 1))
        return dp[m-1][n-1]

좋은 웹페이지 즐겨찾기