题解 | #编辑距离(一)#

编辑距离(一)

https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str1 string字符串 
     * @param str2 string字符串 
     * @return int整型
     */
    int editDistance(string str1, string str2) {
        // write code here
        // 计算通过插入、删除、修改一个字符需要的步骤
        // 类似计算最长公共子序列,如果子序列之间距离不一致使用插入、删除。一致则使用修改,
        // 记录编辑距离,当两个值相等,编辑距离不变,否则加值修改
        int Asize = str1.size();
        int Bsize = str2.size();
        vector<vector<int>> value2(Asize+1, vector(Bsize+1, 0)); // 记录编辑距离
         // 需要注意的是,需要注意i=0.j=0的情况, 默认赋值为index
        for(int i = 0; i<=Asize; i++){
            value2[i][0] = i;
        }
        for(int j = 0; j<=Bsize; j++){
            value2[0][j] = j;
        }
       
        for(int i = 1; i<=Asize; i++){
            for(int j = 1; j<=Bsize; j++){
                // 如果相等
                
                if(str1[i-1] == str2[j-1]){
                    cout<<i-1<<","<<j-1<<","<<str1[i-1]<<","<<str2[j-1]<<endl;
                    value2[i][j] = value2[i-1][j-1];
                }
                else{
                    // 取插入,删除,修改的值的最小值
                    int a = value2[i-1][j];
                    int b = value2[i][j-1];
                    int c = value2[i-1][j-1];
                    value2[i][j] = min(a,min(b,c))+1; //只要不相等就需要+1
                    
                }
            }
        }
        cout<<"XXXXX"<<endl;
        for(int i = 0; i<Asize; i++){
            for(int j = 0; j<Bsize; j++){
                cout<<value2[i][j];
            }
            cout<<endl;
        }
        cout<<"XXXXX"<<endl;
        
        return value2[Asize][Bsize];
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务