代码随想录算法训练营第五十六天 | 两个字符串的删除操作、编辑距离

● 今日学习的文章链接和视频链接

题目583. 两个字符串的删除操作
题目72. 编辑距离

● 看到题目的第一想法

编辑距离大boss

● 看完代码随想录之后的想法

很清楚

● 实现过程中遇到哪些困难

最后这个边界距离就很清楚了,什么插入删除其实就是对字符串进行操作即改动,那么只要看三种情况哪个改动最少就行

● 解题代码

  1. 点击查看代码
    class Solution {
        public int minDistance(String word1, String word2) {
    		int[][] dp = new int[word1.length() + 1][word2.length() + 1];
    		for (int i = 1; i <= word1.length(); i++) {
    			for (int j = 1; j <= word2.length(); j++) {
    				if(word1.charAt(i-1) == word2.charAt(j-1)){
    					dp[i][j] = dp[i-1][j-1] + 1;
    				}else{
    					dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
    				}
    			}
    		}
    		return word1.length() + word2.length() - dp[word1.length()][word2.length()]*2;
        }
    }
    
  2. 点击查看代码
    class Solution {
        public int minDistance(String word1, String word2) {
    		int len1 = word1.length();
    		int len2 = word2.length();
    		int[][] dp = new int[len1+1][len2+1];
    		for (int i = 1; i <= len1; i++) {
    			dp[i][0] = i;
    		}
    		for (int j = 1; j <= len2; j++) {
    			dp[0][j] = j;
    		}
    		for (int i = 1; i <= len1; i++) {
    			for (int j = 1; j <= len2; j++) {
    				if(word1.charAt(i-1) == word2.charAt(j-1)){
    					dp[i][j] = dp[i-1][j-1];
    				}else{
    					dp[i][j] = Math.min(Math.min(dp[i-1][j-1],dp[i][j-1]),dp[i-1][j]) + 1;
    				}
    			}
    		}
    		return dp[len1][len2];
        }
    }
    

● 今日收获,学习时长

今日收获:编辑距离
学习时长:1h
posted @ 2024-01-23 18:13  雨年今天有记录吗  阅读(2)  评论(0)    收藏  举报