LeetCode 72. Edit Distance

https://leetcode.com/problems/edit-distance/description/

动态规划:
一、定义状态
设定二维数组 dp[i][j] 代表字符串 s1 的前 i 个转化成 s2 的前 j 个所需要操作。 
二、寻找状态转移方程
分析:dp[i][j] 可由 dp[i-1][j](增加), dp[i][j-1](删除), dp[i-1][j-1](要看s1[i-1]跟s2[j-1]是否相等) 三种状态转化而来
转移方程:dp[i][j] = min( min(dp[i-1][j], dp[i][j-1])+1, dp[i-1][j-1]+ s1[i-1]==s2[j-1]?0:1 )
三、处理初始值
两种边界值:i==0, dp[0][j] = j(增加); j==0, dp[i][0] = i(删除)

class Solution {
public:
    int minDistance(string word1, string word2) {
        int m = word1.length();
        int n = word2.length();
        cout< >dp(m+1, vector(n+1));
        for(int i=0; i<=m; i++){
            for(int j=0; j<=n; j++){
                if(i==0){
                    dp[i][j] = j;
                }else if(j==0){
                    dp[i][j] = i;
                }else{
                    dp[i][j] = min( min(dp[i-1][j], dp[i][j-1])+1, dp[i-1][j-1]+ (word1[i-1]==word2[j-1]?0:1) );
                }
            }
        }
        int ans = dp[m][n];
        cout<


你可能感兴趣的:(dp)