计算字符串的相似度

计算字符串的相似度_牛客网

https://www.nowcoder.com/practice/f549ee08ddd84b8485a4fa9aefaf4a38?tpId=37&tqId=21302&tPage=4&rp=&ru=%2Fta%2Fhuawei&qru=%2Fta%2Fhuawei%2Fquestion-ranking

#Mark一下
def editDistance(str1,str2):
    len1,len2 = len(str1) +1,len(str2) +1
    dp = [[0 for i in range(len2)]for j in range(len1)]
    for i in range(len1):
        dp[i][0] = i
    for j in range(len2):
        dp[0][j] = j
    for i in range(1,len1):
        for j in range(1, len2):
            dp[i][j] = min(dp[i-1][j]+1,dp[i][j-1] +1,dp[i-1][j-1] +(str1[i-1]!=str2[j-1]))
    return dp[-1][-1]

while True:
    try:
        a = input()
        b = input()
        print('1/' + str(editDistance(a,b)+1))
    except:
        break
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
  
int main ()
{ 
    string s1,s2;
    while( cin>>s1>>s2)
    {
        int len1 = s1.size();
        int len2 = s2.size();
        vector<vector<int>> dp(len1+1, vector<int>(len2+1,0));
         
        for(int i = 0; i <= len1; i++)
            dp[i][0] = i;
        for(int i = 0; i <= len2; i++)
            dp[0][i] = i;
        //
        for(int i = 1; i <= len1; i++){
            for(int j = 1; j <= len2; j++){
                if(s1[i-1] == s2[j-1])
                    dp[i][j] = dp[i-1][j-1];
                else{
                    int tmp = min(dp[i-1][j], dp[i][j-1]);
                    dp[i][j] = 1 + min(tmp, dp[i-1][j-1]);
                }
            }
        }
       cout<<'1'<<'/'<<(dp[len1][len2]+1)<<endl;
    }
      
  return 0;
}


全部评论
你好,请问一下为什么返回dp[-1][-1]啊?数组怎么出现负数?
点赞 回复 分享
发布于 2020-08-03 15:06

相关推荐

码农顶针:估计让你免费辅导老板孩子的学习
点赞 评论 收藏
分享
在秋招的河老师很爱吃:40岁失业 假如22岁开始工作 18年前 2007年那个时候如何 2015年开始互联网爆发 这个时候有了8年经验 然后黄金10年 你想想这些年挣了多少 这要是进的时候某个大厂 这辈子根本花不完了
你找实习最大的坎坷是什么
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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