​LeetCode刷題實戰72:編輯距離

2021-02-21 程序IT圈

算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !

今天和大家聊的問題叫做 編輯距離,我們先來看題面:

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

Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.

You have the following 3 operations permitted on a word:

Insert a character

Delete a character

Replace a character

題意給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少操作數 。

插入一個字符

刪除一個字符

替換一個字符


示例 1:

輸入:word1 = "horse", word2 = "ros"
輸出:3
解釋:
horse -> rorse (將 'h' 替換為 'r')
rorse -> rose (刪除 'r')
rose -> ros (刪除 'e')

示例 2:

輸入:word1 = "intention", word2 = "execution"
輸出:5
解釋:
intention -> inention (刪除 't')
inention -> enention (將 'i' 替換為 'e')
enention -> exention (將 'n' 替換為 'x')
exention -> exection (將 'n' 替換為 'c')
exection -> execution (插入 'u')

解題https://blog.csdn.net/Koala_Tree/article/details/80074722

使用dp[i][j]用來表示字符串1的0~i-1、字符串2的0~j-1的最小編輯距離;

我們可以知道邊界情況:

dp[i][0] = i、dp[0][j]=j;

同時對於兩個字符串的子串,都能分為最後一個字符相等或者不等的情況:

如果words[i-1] == words[j-1]:

dp[i][j] = dp[i-1][j-1];

也就是說當前的編輯距離和位置i和j的字符無關;

如果words[i-1] != words[j-1]:則存在三種可能的操作:

向word1插入:

dp[i][j] = dp[i][j-1] + 1;

從word1刪除:

dp[i][j] = dp[i-1][j] + 1;

替換word1元素:

dp[i][j] = dp[i-1][j-1] + 1;

class Solution {
public:
    int minDistance(string word1, string word2) {
        int rows = word1.length();
        int cols = word2.length();
        vector<vector<int> > dp(rows+1, vector<int>(cols+1, 0));

        for(int i=1; i<=rows; ++i)
            dp[i][0] = i;
        for(int j=1; j<=cols; ++j)
            dp[0][j] = j;

        for(int i=1; i<=rows; ++i){
            for(int j=1; j<=cols; ++j){
                if(word1[i-1] == word2[j-1])
                    dp[i][j] = dp[i-1][j-1];
                else
                    dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;
            }
        }

        return dp[rows][cols];
    }
};

好了,今天的文章就到這裡,如果覺得有所收穫,請順手點個在看或者轉發吧,你們的支持是我最大的動力。

相關焦點

  • leetcode刷題指南之Triangle
    算法及複雜度(9 ms)本題可以為理解全局同一限制性的尋路問題,此類問題均可使用動態規劃思想求解,本文的限制是只能向下且相鄰的地方移動.如上思路進行編碼即可AC本題.AC本體之後,回過頭來看到題目有個提示,如果在O(n)的額外空間進行求解(以上提到的方法使用的額外空間是O(n ^ 2))可以得到獎勵分.
  • ​LeetCode刷題實戰16: 最接近的三數之和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做最接近的三數之和 ,我們先來看題面:https://leetcode-cn.com/problems/3sum-closest/Given an array nums of n integers and an integer target, find three integers in nums such that
  • leetcode刷題指南之PalindromePairs
    = i)25                    ans.push_back({ma[r], i});26            }27        }28        return ans;29    }30};作者:東大ACM退役隊伍編輯:劉凱旋推薦閱讀:leetcode刷題指南之
  • leetcode刷題指南之findtheduplicatenumber
    給出一個長度為n+1的數組,其中每個數字的範圍是[1,n],其中只有一個重複的數,現在要求找出這個重複的數,並且滿足以下條件:不能改動原始數組除了原始數組,只能另外開闢O(1)的空間算法複雜度一定要小於O(n^2)重複的那個數可能重複不止一次初看這題可能有很多種方式
  • ​LeetCode刷題實戰46:全排列
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 全排列,我們先來看題面:https://leetcode-cn.com/problems/permutations/Given a collection of distinct integers, return all possible permutations.
  • ​LeetCode刷題實戰148:排序鍊表
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 排序鍊表,我們先來看題面:https://leetcode-cn.com/problems/sort-list/Given the head of a linked list, return the list after sorting it in ascending order.
  • ​LeetCode刷題實戰120: 三角形最小路徑和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 三角形最小路徑和,我們先來看題面:https://leetcode-cn.com/problems/triangle/Given a triangle, find the minimum path sum from top to bottom.
  • ​LeetCode刷題實戰15題: 三數之和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做三數之和 ,我們先來看題面:https://leetcode.com/problems/3sum/描述給定一個整數的數組,要求尋找當中所有的a,b,c三個數的組合,使得三個數的和為0.注意,即使數組當中的數有重複,同一個數也只能使用一次。
  • LeetCode刷題筆記(1)
    一個人的命運啊,不僅要考慮歷史的進程,還要考慮個人的努力,近期明顯懈怠下來的筆者決定開啟LeetCode刷題大業,從第一題開始按順序刷掉LeetCode
  • LeetCode 系列 19-20題
    P0019刷題地址: https
  • 程式設計師面試的刷題網站都在這了,想要的趕緊拿走!
    首先為什麼要刷題呢?
  • 【記錄帖】(No.001)從零打卡刷Leetcode
    寫在前邊:小詹一直覺得自己編程能力不強,想在網上刷題,又怕不能堅持。不知道有木有和小夥伴和小詹一樣想找個人一起刷題呢?歡迎和小詹一起定期刷leetcode,每周一周五更新一題,每一題都吃透,歡迎一題多解,尋找最優解!
  • 網際網路公司最常見的面試算法題大集合!
    來源:Github編輯:元子【導讀】LeetCode是一個美國的在線編程網站,收集了各個大廠的筆試面試題,對找工作的畢業生和開發者來說,非常有價值。很多求職者都會在LeetCode刷上一遍,面試官也喜歡在上面挑選各類題目。LeetCode是一個美國的在線編程網站,收集了各個大廠的筆試面試題,對找工作的畢業生和開發者來說,非常有價值。不過LeetCode上面的題目很多都是考察應聘者對基礎知識的應用,適合進行練習編程基礎或者準備面試。很多求職者都會在LeetCode刷上一遍,面試官也喜歡在上面挑選各類題目。
  • 來刷 LeetCode 啊
    為什麼要刷LeetCode,刷LeetCode吃力正常嗎?
  • 網際網路公司最常見的面試算法題大集合
    來源:Github編輯:元子【新智元導讀】LeetCode是一個美國的在線編程網站
  • 「偷師」FB面試官發現:刷題超過300,再多刷也沒意義!
    ,雖然刷題量大,但大多都是同類的題型。像Baron這樣只顧埋頭盲刷、只感動自己的同學還真不少,有的甚至都不知道跪在哪裡。九章的令狐衝老師曾經說過:將核心、高頻的題目精刷200~300題就足以應付大廠面試了。再往多了意義並不大!考的不考的都刷,完全是浪費時間。
  • LeetCode Top 100 高頻算法題 32. Longest Valid Parentheses
    由於公眾號做了改版,為了保證公眾號的文章可以準時推送到你手裡,大家記得點擊上方藍色」菜鳥名企夢「將咱們的公眾號 加星標置頂 ,在此真誠的表示感謝~LeetCode Top 100高頻算法題,即LeetCode上最高頻的100道求職面試算法題。
  • LeetCode Top 100 高頻算法題39. Combination Sum
    即LeetCode上最高頻的100道求職面試算法題。小編和實驗室同學之前面試找工作,也只刷了劍指offer和這top 100算法題,在實際面試中也遇到了很多LeetCode上的原題。劍指offer算法最優解之前和大家分享了,LeetCode Top 100這100道算法題,每道題小編都刷了很多遍,並且總結了一種最適合面試時手撕算法的最優解法。後續每天和大家分享一道LeetCode top 100高頻算法題,以及小編總結的最優解法。
  • LeetCode 每日一題(順帶吹水聊聊未來)
    2020-7-20 00:35:07寫完小冊,看到每日一題刷新了,【簡單】難度,那就順帶刷了,再順帶和小夥伴們吹吹水吧~題目 給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等於目標數。來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
  • Leetcode weekly contest三月小結
    然而當我仔細思考了最後一周的最後一題,我覺得,好難啊。我一直建議大家分類刷題,這也意味著很多用遞歸DFS/BFS、哈希、查找、堆棧這些常規套路可以解決的題目,應該問題不大。Create Target Array in the Given Orderhttps://leetcode.com/problems/create-target-array-in-the-given-order/這題雖然從比賽的角度只是打卡題,但是仔細研究的話還是很有趣的。