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

代碼隨想錄 Day - 59|#647 回文字串|#516 最長回文子序列

這篇具有很好參考價值的文章主要介紹了代碼隨想錄 Day - 59|#647 回文字串|#516 最長回文子序列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

清單

● 647. 回文字串
● 516. 最長回文子序列

LeetCode #647 回文字串

1. 題目

給你一個字符串 s ,請你統(tǒng)計并返回這個字符串中回文子串的數(shù)目。
回文字符串是正著讀和倒過來讀一樣的字符串。
子字符串是字符串中的由連續(xù)字符組成的一個序列。
具有不同開始位置或結(jié)束位置的子串,即使是由相同的字符組成,也會被視作不同的子串

2. 思路

需要判斷回文字符串(正著讀和倒過來讀)采用二維數(shù)組
增加一個result 參數(shù)用于記錄True個數(shù) 最后return result 即為答案

  1. dp含義: s[i] (正著讀) 和 s[j] (倒著讀) 能否形成回文字符串
  2. 遞推公式 :
    • s[i] != s[j] —> dp[i][j] = False
    • s[i] == s[j]:
      1. j - i <=1 ----> dp[i][j] = True
      1. j - i > 1 -----> dp[i][j] = dp[ i+1 ][ j-1 ]
  3. 初始化: dp[0][0] = False
  4. 遍歷順序: 因為j為倒著讀 因此遍歷順序為從下至上 從左往右(類比雙指針)

3. 代碼實現(xiàn)

class Solution:
    def countSubstrings(self, s: str) -> int:
        #Initial dp
        dp = [[False] * len(s) for _ in range(len(s))]

        result = 0

        for i in range(len(s)-1, -1, -1):
            for j in range(i, len(s)):
                if s[i] == s[j]:
                    if j - i <= 1:
                        dp[i][j] = True
                        result += 1
                    elif dp[i+1][j-1]:
                        dp[i][j] = True
                        result += 1
        return result

LeetCode #516 最長回文子序列

1. 題目

給你一個字符串 s,找出其中最長的回文子序列,并返回該序列的長度。
子序列定義為:不改變剩余字符順序的情況下,刪除某些字符或者不刪除任何字符形成的一個序列。

2. 思路

需要統(tǒng)計回文字符串長度(正著讀和倒過來讀)采用二維數(shù)組文章來源地址http://www.zghlxwxcb.cn/news/detail-728541.html

  1. dp含義: s[i] (正著讀) 和 s[j] (倒著讀) 形成的回文字符串長度為dp[i][j]
  2. 遞推公式 :
    • s[i] != s[j] —> dp[i][j] = max(dp[i+1][j], dp[i][j-1])
    • s[i] == s[j]: dp[i][j] = dp[i+1][j-1] + 2
  3. 初始化: dp[0][0] = 0, dp[i][i] = 1
  4. 遍歷順序: 因為j為倒著讀 因此遍歷順序為從下至上 從左往右(類比雙指針)

3. 代碼實現(xiàn)

class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        #Initial dp
        dp = [[0] * len(s) for _ in range(len(s))]
        for i in range(len(s)):
            dp[i][i] = 1
        for i in range(len(s)-1, -1, -1):
            for j in range(i + 1, len(s)):
                if s[i] == s[j]:
                    dp[i][j] = dp[i+1][j-1] + 2 
                else:
                    dp[i][j] = max(dp[i+1][j], dp[i][j-1])

        return dp[0][-1]

到了這里,關(guān)于代碼隨想錄 Day - 59|#647 回文字串|#516 最長回文子序列的文章就介紹完了。如果您還想了解更多內(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)文章

  • Day 57|647. 回文子串| 516.最長回文子序列

    ● 647. 回文子串 ● 516.最長回文子序列 ● 動態(tài)規(guī)劃總結(jié)篇 難

    2024年02月16日
    瀏覽(59)
  • 代碼隨想錄第二天|977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣

    代碼隨想錄第二天|977.有序數(shù)組的平方 209.長度最小的子數(shù)組 59.螺旋矩陣

    第二天開始了, 一開始自己寫,就只想到了先一個個平方,再排序(甚至打算手寫排序循環(huán),后來才發(fā)現(xiàn)c++有自帶的排序函數(shù)sort(a.begin(),a.end()),c++真好,加油努力學(xué)習(xí)c++。 第二種方法然后看提示用雙指針也完全沒想出來,只能看文章了,淚 寫完發(fā)現(xiàn)代碼亂七八糟,要改。

    2024年02月13日
    瀏覽(26)
  • 代碼隨想錄Day58

    昨天因為志愿活動和筆試耽誤了一整天,今天繼續(xù)學(xué)習(xí)動規(guī)解決子序列問題。 給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一個子序列,

    2023年04月27日
    瀏覽(97)
  • 代碼隨想錄Day50

    昨天因為準備面試所以咕咕了一天。今天繼續(xù)學(xué)習(xí)動規(guī)算法,盡管背包問題已經(jīng)結(jié)束但其中的各類思想仍需要進一步理解。 你是一個專業(yè)的小偷,計劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩

    2023年04月14日
    瀏覽(93)
  • 代碼隨想錄day44

    完全背包 其實就是每個物品可以使用無數(shù)次,給我們一個容器,裝滿這個容器的最大價值是多少。 思路: 如果求組合數(shù)就是外層for循環(huán)遍歷物品,內(nèi)層for遍歷背包。 如果求排列數(shù)就是外層for遍歷背包,內(nèi)層for循環(huán)遍歷物品。 完全背包的組合和排序 518. 零錢兌換 II 題目 給你

    2023年04月17日
    瀏覽(91)
  • 代碼隨想錄day01

    ● 思維不難,主要是考察對代碼的掌控能力 ● 內(nèi)存中的存儲方式:存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合 ● 數(shù)組可以通過下標索引獲取到下標對應(yīng)的數(shù)據(jù) ● 數(shù)組下標從0開始 ● 因為內(nèi)存空間地址連續(xù),因此刪除或增加元素的時候,難免移動其他元素地址 ● Java中的

    2024年02月13日
    瀏覽(94)
  • 代碼隨想錄day02

    ● 力扣題目鏈接 ● 給你一個按 非遞減順序 排序的整數(shù)數(shù)組 nums,返回 每個數(shù)字的平方 組成的新數(shù)組,要求也按 非遞減順序 排序。 思路 ● 暴力排序,時間復(fù)雜度O(n + nlogn) ● 使用雙指針,時間復(fù)雜度O(n) 代碼 ● 力扣題目鏈接 ● 給定一個含有 n 個正整數(shù)的數(shù)組和一個正整

    2024年02月13日
    瀏覽(104)
  • 代碼隨想錄day11

    代碼隨想錄day11

    20. 有效的括號 ? 思路:這里用模擬棧的方法會更好理解,也就是我們每次遇到朝左方向的三種類型的時候,就加入相反方向的右括號到result棧中。由于棧是一個先進后出的方式,所以我們會有一個判斷stack當前為不為空,和stack[-1]是不是和當前循環(huán)到的括號相同。如果說相同

    2024年02月13日
    瀏覽(25)
  • 代碼隨想錄Day62

    今天繼續(xù)學(xué)習(xí)單調(diào)棧解決相關(guān)問題。 nums1?中數(shù)字?x?的 下一個更大元素 是指?x?在?nums2 中對應(yīng)位置 右側(cè) 的 第一個 比?x?大的元素。 給你兩個 沒有重復(fù)元素 的數(shù)組?nums1 和?nums2 ,下標從 0 開始計數(shù),其中nums1?是?nums2?的子集。 對于每個 0 = i nums1.length ,找出滿足 nums1

    2024年02月01日
    瀏覽(101)
  • 【代碼隨想錄】刷題Day36

    435. 無重疊區(qū)間 先從小到大排序,其實本題依然是求出共同區(qū)域,只不過題目需要我們刪除盡量少的區(qū)間。所以我們需要刪除的一定是范圍跨度大的并且跟其他有公共區(qū)間的區(qū)域。所以每次更新右邊范圍都需要考慮最小的范圍。 1.if(intervals[i][0]end),說明有重復(fù)的區(qū)間,那么我

    2024年02月07日
    瀏覽(93)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包