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

每日一題之判斷子序列

這篇具有很好參考價(jià)值的文章主要介紹了每日一題之判斷子序列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

判斷子序列

題目鏈接

給定字符串 st ,判斷 s 是否為 t 的子序列。

字符串的一個(gè)子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對(duì)位置形成的新字符串。(例如,"ace""abcde"的一個(gè)子序列,而"aec"不是)。

示例 1:

輸入:s = "abc", t = "ahbgdc"
輸出:true

示例 2:

輸入:s = "axc", t = "ahbgdc"
輸出:false

提示:

  • 0 <= s.length <= 100
  • 0 <= t.length <= 10^4
  • 兩個(gè)字符串都只由小寫字符組成。

首先,我們定義一個(gè)二維布爾數(shù)組 dp,其中 dp[i][j] 表示字符串 t 的前 i 個(gè)字符是否包含字符串 s 的前 j 個(gè)字符作為子序列。我們的目標(biāo)是求出 dp[t.length()][s.length()]。

動(dòng)態(tài)規(guī)劃的轉(zhuǎn)移方程如下:

  • 當(dāng) s[j] != t[i] 時(shí),dp[i][j] = dp[i-1][j]。這表示如果當(dāng)前考察的字符 t[i] 和 s[j] 不相等,那么 t 的前 i 個(gè)字符是否包含 s 的前 j 個(gè)字符作為子序列的結(jié)果與 t 的前 i-1 個(gè)字符是否包含 s 的前 j 個(gè)字符作為子序列的結(jié)果相同。

  • 當(dāng) s[j] == t[i] 時(shí),我們有兩種選擇:

    • 我們可以選擇使用 t[i] 來匹配 s[j],此時(shí)我們需要查看 t 的前 i-1 個(gè)字符是否包含 s 的前 j-1 個(gè)字符作為子序列,這就是 dp[i-1][j-1]。
    • 我們也可以選擇不使用 t[i] 來匹配 s[j],即我們跳過 t[i],查看 t 的前 i-1 個(gè)字符是否包含 s 的前 j 個(gè)字符作為子序列,這就是 dp[i-1][j]。

    因此,當(dāng) s[j] == t[i] 時(shí),dp[i][j] = dp[i-1][j-1] || dp[i-1][j]。如果 t 的前 i-1 個(gè)字符包含 s 的前 j-1 個(gè)字符作為子序列,或者 t 的前 i-1 個(gè)字符包含 s 的前 j 個(gè)字符作為子序列,那么 t 的前 i 個(gè)字符就包含 s 的前 j 個(gè)字符作為子序列。

下面是使用 Python 實(shí)現(xiàn)的代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-604846.html

def isSubsequence(s, t):
    m, n = len(t), len(s)
    dp = [[False] * (n + 1) for _ in range(m + 1)]
    
    # 當(dāng) s 為空字符串時(shí),它是任何字符串的子序列
    for i in range(m + 1):
        dp[i][0] = True

    for i in range(1, m + 1):
        for j in range(1, min(i + 1, n + 1)):  # j 不能大于 i
            if t[i - 1] == s[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] or dp[i - 1][j]
            else:
                dp[i][j] = dp[i - 1][j]

    return dp[m][n]

到了這里,關(guān)于每日一題之判斷子序列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 每日一題之最長連續(xù)遞增序列

    題目鏈接 給定一個(gè)未經(jīng)排序的整數(shù)數(shù)組,找到最長且 連續(xù)遞增的子序列 ,并返回該序列的長度。 連續(xù)遞增的子序列 可以由兩個(gè)下標(biāo) l 和 r ( l r )確定,如果對(duì)于每個(gè) l = i r ,都有 nums[i] nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是連續(xù)遞增子序列。

    2024年02月12日
    瀏覽(20)
  • (動(dòng)態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    難度:困難 給你一個(gè)字符串 s ,請(qǐng)你將 s 分割成一些子串,使每個(gè)子串都是回文。 返回符合要求的 最少分割次數(shù) 。 示例 1: 輸入:s = “aab” 輸出:1 解釋:只需一次分割就可將 s 分割成 [“aa”,“b”] 這樣兩個(gè)回文子串。 示例 2: 輸入:s = “a” 輸出:0 示例 3: 輸入:

    2024年02月15日
    瀏覽(43)
  • LeetCode每日一題之 復(fù)寫0

    LeetCode每日一題之 復(fù)寫0

    目錄 題目介紹: 算法原理: 特殊位置處理: 代碼實(shí)現(xiàn): 題目鏈接:. - 力扣(LeetCode) 這種對(duì)數(shù)組元素進(jìn)行修改,移動(dòng)的題目我們?nèi)匀豢梢允褂秒p指針法,不過我們按照常規(guī)思路從左到右處理數(shù)組,不難發(fā)現(xiàn)如下這種問題: 當(dāng)cur指向1時(shí),讓dest下一個(gè)元素復(fù)寫cur指向的元素

    2024年04月23日
    瀏覽(27)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 60. n個(gè)骰子的點(diǎn)數(shù) ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 60. n個(gè)骰子的點(diǎn)數(shù) ——【Leetcode每日一題】

    難度:中等 把 n 個(gè)骰子扔在地上,所有骰子朝上一面的點(diǎn)數(shù)之和為 s 。輸入 n ,打印出s的所有可能的值出現(xiàn)的概率。 你需要用一個(gè)浮點(diǎn)數(shù)數(shù)組返回答案,其中第 i 個(gè)元素代表這 n 個(gè)骰子所能擲出的點(diǎn)數(shù)集合中第 i 小的那個(gè)的概率。 示例 1: 輸入: 1 輸出: [0.16667,0.16667,0.16667,

    2024年02月11日
    瀏覽(19)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 42. 連續(xù)子數(shù)組的最大和 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 42. 連續(xù)子數(shù)組的最大和 ——【Leetcode每日一題】

    難度:簡單 輸入一個(gè)整型數(shù)組,數(shù)組中的一個(gè)或連續(xù)多個(gè)整數(shù)組成一個(gè)子數(shù)組。求所有子數(shù)組的和的最大值。 要求時(shí)間復(fù)雜度為 O(n) 。 示例1: 輸入: nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。 提示 : 1 = a r r . l e n g t h = 1 0 5 1 = arr.length = 10^

    2024年02月11日
    瀏覽(27)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 10- I. 斐波那契數(shù)列 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 10- I. 斐波那契數(shù)列 ——【Leetcode每日一題】

    難度:簡單 寫一個(gè)函數(shù),輸入 n ,求斐波那契(Fibonacci)數(shù)列的第 n 項(xiàng)(即 F(N) )。斐波那契數(shù)列的定義如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N 1. 斐波那契數(shù)列由 0 和 1 開始,之后的斐波那契數(shù)就是由之前的兩數(shù)相加而得出。 答案需要取模 1e9+7(1000000007),如計(jì)

    2024年02月12日
    瀏覽(20)
  • 羅勇軍 →《算法競賽·快沖300題》每日一題:“乘積” ← 動(dòng)態(tài)規(guī)劃

    【題目來源】 http://oj.ecustacm.cn/problem.php?id=1781 http://oj.ecustacm.cn/viewnews.php?id=1023 【題目描述】 給你一個(gè)長度為 n 的序列,序列中的元素只包括 1 和 -1。 請(qǐng)問有多少個(gè)連續(xù)的子序列乘積為正數(shù)。 【輸入格式】 輸入第一行為正整數(shù) n。(n不超過10^6) 第二行包含 n 個(gè)整數(shù)。 【輸

    2024年02月11日
    瀏覽(19)
  • 【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    2024-1-11 2645. 構(gòu)造有效字符串的最少插入數(shù) 方法一:計(jì)算組數(shù) 1.用count統(tǒng)計(jì),能構(gòu)成幾組abc 2.如果當(dāng)前字符大于之前字符,說明還在組內(nèi),不更新 3.如果當(dāng)前字符小于等于之前字符,說明不是同一組的abc,組數(shù)更新 4.最終返回值:組數(shù)*3,再減去原本的字符數(shù),就是要插入的次數(shù)

    2024年01月17日
    瀏覽(23)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    難度:中等 請(qǐng)從字符串中找出一個(gè)最長的不包含重復(fù)字符的子字符串,計(jì)算該最長子字符串的長度。 示例 1: 輸入: “abcabcbb” 輸出: 3 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 “abc”,所以其長度為 3。 示例 2: 輸入: “bbbbb” 輸出: 1 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 “b”,所

    2024年02月11日
    瀏覽(26)
  • 算法 DAY55 動(dòng)態(tài)規(guī)劃11 392.判斷子序列 115.不同的子序列

    算法 DAY55 動(dòng)態(tài)規(guī)劃11 392.判斷子序列 115.不同的子序列

    本題可以直接用雙指針解法。但是本題是編輯距離的入門題目,故采用動(dòng)態(tài)規(guī)劃解法為后序“編輯距離”類題目打基礎(chǔ)。 本題與最大子序列非常相似,但不同的是s必須連續(xù),t可以不連續(xù)。 五部曲 1、dp[i][j] 表示以下標(biāo)i-1為結(jié)尾的字符串s,和以下標(biāo)j-1為結(jié)尾的字符串t,相同

    2024年02月03日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包