算法-字符串-72.编辑距离

一、题目

二、思路解析

1.思路:

最少操作数------动态数组

res[i][j]:长度为i的字符串转化为长度为j字符串的最少操作

2.常用方法:

3.核心逻辑:

1.情况一:当word1为空,word2不为空时

java 复制代码
for(int i=0;i<=size2;i++){
    res[0][i]=i;
}

2.情况二:word1不为空,word2为空时

java 复制代码
for(int i=0;i<=size1;i++){
    res[i][0]=i;
}

3.情况三:word1和word2都不为空

a.如果当前二者轮询到的字符是相等的,那么res[i][j]=res[i-1][j-1](两个字符串前一位的一致的最小操作数)

java 复制代码
if(word1.charAt(i-1)==word2.charAt(j-1)){
    res[i][j]=res[i-1][j-1];
}

b.若当前二者轮询的字符是不相等的,那么来源有2个:

1.字符串都删除当前字符,即res[i-1][j-1]

2.有其中一个字符串删除当前字符 res[i-1][j]或res[i][j-1]

java 复制代码
else {
                    res[i][j]=Math.min(res[i-1][j-1],Math.min(res[i-1][j],res[i][j-1]))+1;
                }

三、代码实现

java 复制代码
class Solution {
    public int minDistance(String word1, String word2) {
        int size1=word1.length();
        int size2=word2.length();

        int[][]res=new int[size1+1][size2+1];

        //初始化1.word1为空字符串时,需要经过word2的长度次数才能转化成功
        for(int i=1;i<=size2;i++){
            res[0][i]=i;
        }

        //初始化2:word2为空字符串时。需要经过word1的长度次数才能转化成功
        for(int i=1;i<=size1;i++){
            res[i][0]=i;
        }

        for(int i=1;i<=size1;i++){
            for(int j=1;j<=size2;j++){
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    res[i][j]=res[i-1][j-1];
                }else{
                    res[i][j]=Math.min(res[i-1][j-1],Math.min(res[i-1][j],res[i][j-1]))+1;
                }
            }
        }
        return res[size1][size2];
    }
}
相关推荐
网安小陈2 分钟前
【网安】处理项目中的一些常见漏洞bug(java相关)
java·开发语言·数据库·安全·web安全·网络安全·bug
佚明zj13 分钟前
[ISP] raw图常见的噪声种类以及生成原因
算法
无 证明18 分钟前
【C++】类和对象 (第一弹)
开发语言·c++·算法
xianduan_23 分钟前
leetcode刷题记录44-208. 实现 Trie (前缀树)
算法·leetcode·翻译
梭七y24 分钟前
【力扣hot100题】(051)腐烂的橘子
算法·leetcode·职场和发展
咖啡里的茶i1 小时前
随机产生4位随机码(java)
java
小小鸭程序员1 小时前
在Spring Boot中实现图片上传和修改
java·数据库·python·mysql·spring
WG_171 小时前
图的储存+图的遍历
数据结构·算法
C-DHEnry1 小时前
SPFA+SPFA优化+优先队列(汽车加油行驶问题_铺垫aa、汽车加油行驶问题qiche、EasySSSPsssp)
算法·汽车
疾跑哥布林升级版2 小时前
C++---day7
开发语言·c++·算法