国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

每日一題之兩個字符串的刪除操作

這篇具有很好參考價值的文章主要介紹了每日一題之兩個字符串的刪除操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目鏈接

給定兩個單詞?word1?和?word2?,返回使得?word1?和??word2?**相同所需的最小步數(shù)

每步?可以刪除任意一個字符串中的一個字符。

示例 1:

輸入: word1 = "sea", word2 = "eat"
輸出: 2
解釋: 第一步將 "sea" 變?yōu)?"ea" ,第二步將 "eat "變?yōu)?"ea"

示例 ?2:

輸入:word1 = "leetcode", word2 = "etco"
輸出:4

提示:

  • 1 <= word1.length, word2.length <= 500
  • word1?和?word2?只包含小寫英文字母

我們可以定義一個二維數(shù)組dp,其中dp[i][j]表示將word1的前i個字符轉(zhuǎn)換為word2的前j個字符所需的最小步數(shù)。

首先,我們需要考慮邊界情況,當(dāng)word1word2的長度分別為零時,它們已經(jīng)相同了,所以dp[0][0] = 0。當(dāng)word1為空字符串,而word2不為空時,則需要刪除word2中的所有字符,所以dp[0][j] = j。同理,當(dāng)word2為空字符串,而word1不為空時,需要刪除word1中的所有字符,所以dp[i][0] = i。

接下來,我們考慮狀態(tài)轉(zhuǎn)移方程。假設(shè)我們要計算dp[i][j],即將word1的前i個字符轉(zhuǎn)換為word2的前j個字符所需的最小步數(shù)。我們有以下幾種情況:

  1. 如果word1[i-1]等于word2[j-1],即當(dāng)前字符相等,那么不需要進行刪除操作,所以dp[i][j] = dp[i-1][j-1]。

  2. 如果word1[i-1]word2[j-1]不相等,那么我們有兩種選擇:

    • 刪除word1[i-1]字符,然后將word1的前i-1個字符轉(zhuǎn)換為word2的前j個字符,所以dp[i][j] = 1 + dp[i-1][j]。
    • 刪除word2[j-1]字符,然后將word1的前i個字符轉(zhuǎn)換為word2的前j-1個字符,所以dp[i][j] = 1 + dp[i][j-1]。綜上所述,我們可以得到狀態(tài)轉(zhuǎn)移方程:
    if word1[i-1] == word2[j-1]:
        dp[i][j] = dp[i-1][j-1]
    else:
        dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1])
    
    

最后,我們可以通過填充dp數(shù)組來計算所需的最小步數(shù)。最終的結(jié)果即為dp[len(word1)][len(word2)]文章來源地址http://www.zghlxwxcb.cn/news/detail-609058.html

def minDistance(word1, word2):
    m, n = len(word1), len(word2)
    dp = [[0] * (n+1) for _ in range(m+1)]  # 初始化dp數(shù)組

    # 初始化邊界情況
    for i in range(m+1):
        dp[i][0] = i
    for j in range(n+1):
        dp[0][j] = j

    # 計算dp數(shù)組
    for i in range(1, m+1):
        for j in range(1, n+1):
            if word1[i-1] == word2[j-1]:
                dp[i][j] = dp[i-1][j-1]
            else:
                dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1])

    return dp[m][n]

到了這里,關(guān)于每日一題之兩個字符串的刪除操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Day56 | 583. 兩個字符串的刪除操作 | 72. 編輯距離

    583. 兩個字符串的刪除操作 注意點: 1.當(dāng)word1[i - 1] 與 word2[j - 1]不相同的時候, 情況一:刪word1[i - 1],最少操作次數(shù)為dp[i - 1][j] + 1 情況二:刪word2[j - 1],最少操作次數(shù)為dp[i][j - 1] + 1 情況三:同時刪word1[i - 1]和word2[j - 1],操作的最少次數(shù)為dp[i - 1][j - 1] + 2 因為 dp[i][j-1]+1 = d

    2024年02月08日
    瀏覽(21)
  • 【dp】不同的子序列 & 兩個字符串的刪除操作 & 編輯距離

    【dp】不同的子序列 & 兩個字符串的刪除操作 & 編輯距離

    dp[i][j]:以j-1為結(jié)尾的t出現(xiàn)在以i-1為結(jié)尾的s子序列的個數(shù) 需要開辟m+1行,n+1列的二維數(shù)組 為啥狀態(tài)方程是: s[i] == t[j] 時 dp[i][j] = dp[i-1][j-1] + dp[i-1][j] s[i] != t[j] 時 dp[i][j] = dp[i-1][j] 先看s[i] == t[j] 時,以s = “rara” t = “ra” 為例,當(dāng)i = 3, j = 1時,s[i] == t[j] 此時分為2種情況:

    2023年04月15日
    瀏覽(27)
  • LeetCode | C++ 動態(tài)規(guī)劃——583. 兩個字符串的刪除操作、72. 編輯距離

    583題目鏈接 做法一: 本題和1143.最長公共子序列基本相同,只要求出兩個字符串的最長公共子序列長度即可,那么除了最長公共子序列之外的字符都是必須刪除的,最后用兩個字符串的總長度減去兩個最長公共子序列的長度就是刪除的最少步數(shù)。 做法二: 本題和115.不同的子

    2024年02月16日
    瀏覽(24)
  • 代碼隨想錄第五十六天——兩個字符串的刪除操作,編輯距離

    題目鏈接:兩個字符串的刪除操作 兩個字符串可以相互刪除 版本一: 確定dp數(shù)組及下標(biāo)的含義 dp[i][j] :以i-1為結(jié)尾的字符串word1,和以j-1為結(jié)尾的字符串word2,想要達到相等,所需要刪除元素的最少次數(shù) 確定遞推公式 (1)當(dāng)word1[i - 1] 與 word2[j - 1]相同: (2)當(dāng)word1[i - 1] 與

    2024年02月02日
    瀏覽(27)
  • 代碼隨想錄打卡第56天|583. 兩個字符串的刪除操作;72. 編輯距離

    583. 兩個字符串的刪除操作 關(guān)鍵點1:dp數(shù)組的含義 dp[i][j],使得以i-1為結(jié)尾word1 和 以j-1為結(jié)尾的word2 相同所需的最小步數(shù); 關(guān)鍵點2:遞歸公式的推導(dǎo) if(nums1[i-1] == nums2[j-1]),則i和j同時移動,所以為i-1,j-1;dp[i][j] = dp[i-1][j-1];由于不需要進行刪除操作,所以不需要加1 如果不相

    2023年04月19日
    瀏覽(34)
  • ( 字符串) 205. 同構(gòu)字符串 ——【Leetcode每日一題】

    ( 字符串) 205. 同構(gòu)字符串 ——【Leetcode每日一題】

    難度:簡單 給定兩個字符串 s 和 t ,判斷它們是否是同構(gòu)的。 如果 s 中的字符可以按某種映射關(guān)系替換得到 t ,那么這兩個字符串是同構(gòu)的。 每個出現(xiàn)的字符都應(yīng)當(dāng)映射到另一個字符,同時不改變字符的順序。不同字符不能映射到同一個字符上,相同字符只能映射到同一個

    2024年02月02日
    瀏覽(65)
  • 每日一題——字符串變形

    題目 對于一個長度為 n 字符串,我們需要對它做一些變形。 首先這個字符串中包含著一些空格,就像\\\"Hello World\\\"一樣,然后我們要做的是把這個字符串中由空格隔開的單詞反序,同時反轉(zhuǎn)每個字符的大小寫。 比如\\\"Hello World\\\"變形后就變成了\\\"wORLD hELLO\\\"。 需要考慮字符串結(jié)尾是空

    2024年02月13日
    瀏覽(21)
  • (字符串 ) 459. 重復(fù)的子字符串——【Leetcode每日一題】

    (字符串 ) 459. 重復(fù)的子字符串——【Leetcode每日一題】

    難度:簡單 給定一個非空的字符串 s ,檢查是否可以通過由它的一個子串重復(fù)多次構(gòu)成。 示例 1: 輸入: s = “abab” 輸出: true 解釋: 可由子串 “ab” 重復(fù)兩次構(gòu)成。 示例 2: 輸入: s = “aba” 輸出: false 示例 3: 輸入: s = “abcabcabcabc” 輸出: true 解釋: 可由子串 “abc” 重復(fù)四次構(gòu)

    2024年02月07日
    瀏覽(22)
  • (藍橋杯每日一題)字符串排序

    (藍橋杯每日一題)字符串排序

    本題為填空題,只需要算出結(jié)果后,在代碼中使用輸出語句將所填結(jié)果輸出即可。 小藍要把一個字符串中的字母按其在字母表中的順序排列 例如,LANQIAO 排列后為AAILNOQ 又如, GOODGOODSTUDYDAYDAYUP 排后為AADDDDDGGOOOOPSTUUYYY 請問對于以下字符串,排列之后字符串是什么? WHERETHEREISA

    2024年01月21日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包