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

動(dòng)態(tài)規(guī)劃學(xué)習(xí)——最長回文子序列,讓字符串變成回文串的最小插入次數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了動(dòng)態(tài)規(guī)劃學(xué)習(xí)——最長回文子序列,讓字符串變成回文串的最小插入次數(shù)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

動(dòng)態(tài)規(guī)劃學(xué)習(xí)——最長回文子序列,讓字符串變成回文串的最小插入次數(shù),動(dòng)態(tài)規(guī)劃算法學(xué)習(xí),動(dòng)態(tài)規(guī)劃,學(xué)習(xí),算法,學(xué)習(xí)筆記,c++

一,最長回文串

1.題目

給你一個(gè)字符串?s?,找出其中最長的回文子序列,并返回該序列的長度。

子序列定義為:不改變剩余字符順序的情況下,刪除某些字符或者不刪除任何字符形成的一個(gè)序列。

示例 1:

輸入:s = "bbbab"
輸出:4
解釋:一個(gè)可能的最長回文子序列為 "bbbb" 。

示例 2:

輸入:s = "cbbd"
輸出:2
解釋:一個(gè)可能的最長回文子序列為 "bb" 。

提示:

  • 1 <= s.length <= 1000
  • s?僅由小寫英文字母組成

2.題目接口

class Solution {
public:
    int longestPalindromeSubseq(string s) {

    }
};

?3.解題思路及其代碼

? ? ? 在思考這道題時(shí),我們先想到的可能是dp[i]來作狀態(tài)轉(zhuǎn)移方程,表示以第i個(gè)位置為結(jié)尾的最長回文子序列。但是,我們是不能這樣定義的。因?yàn)榈趇個(gè)位置能不能加入到這個(gè)子序列中是要看當(dāng)前子序列的開頭位置的字符是否與之匹配的。

? ? ? 在弄明白拋棄掉這種想法以后,我們便可以試著以區(qū)間dp的方式來解決:

1.狀態(tài)表示:dp[i][j],表示在區(qū)間[i,j]的最長子序列。

2.狀態(tài)轉(zhuǎn)移方程:對于狀態(tài)轉(zhuǎn)移方程的推導(dǎo)需要分類討論,分類如下:

動(dòng)態(tài)規(guī)劃學(xué)習(xí)——最長回文子序列,讓字符串變成回文串的最小插入次數(shù),動(dòng)態(tài)規(guī)劃算法學(xué)習(xí),動(dòng)態(tài)規(guī)劃,學(xué)習(xí),算法,學(xué)習(xí)筆記,c++

在第二種情況下dp[i][j]要等于在這三種情況下的最大值,又因?yàn)閐p[i+1][j-1]其實(shí)是在剩下的兩種情況中包含的,所以dp[i][j] = max(dp[i+1][j],dp[i][j-1])。

代碼

根據(jù)以上思路寫出代碼如下:

class Solution {
public:
    int longestPalindromeSubseq(string s) {
        int n = s.size();
        vector<vector<int>>dp(n,vector<int>(n));

        for(int i = n-1;i>=0;i--)//因?yàn)橛衐p[i][j] = dp[i+1][j]的情況,所以要從下到上初始化
        {
            for(int j = i;j<n;j++)//j>=i
            {
               if(s[i] == s[j])//第一種情況
               {
                   if(j>i) dp[i][j] = dp[i+1][j-1]+2;//j>i才能加2
                   else dp[i][j] = 1;//i == j,個(gè)數(shù)為1
               }
               else//第二種情況
               {
                   dp[i][j] = max(dp[i+1][j],dp[i][j-1]);//不用擔(dān)心越界的情況,因?yàn)楫?dāng)j == 0時(shí)
                                                         //i一定等于0,所以會(huì)在第一種情況中處理
               }
            }
        }

       return dp[0][n-1];
    }

};

二,讓字符串成為回文串的最小插入次數(shù)

1,題目

1312.?讓字符串成為回文串的最少插入次數(shù)

提示

困難

218

相關(guān)企業(yè)

給你一個(gè)字符串?s?,每一次操作你都可以在字符串的任意位置插入任意字符。

請你返回讓?s?成為回文串的?最少操作次數(shù)?。

「回文串」是正讀和反讀都相同的字符串。

示例 1:

輸入:s = "zzazz"
輸出:0
解釋:字符串 "zzazz" 已經(jīng)是回文串了,所以不需要做任何插入操作。

示例 2:

輸入:s = "mbadm"
輸出:2
解釋:字符串可變?yōu)?"mbdadbm" 或者 "mdbabdm" 。

示例 3:

輸入:s = "leetcode"
輸出:5
解釋:插入 5 個(gè)字符后字符串變?yōu)?"leetcodocteel" 。

提示:

  • 1 <= s.length <= 500
  • s?中所有字符都是小寫字母。

2.題目接口

class Solution {
public:
    int minInsertions(string s) {

    }
};

3.解題思路及其代碼

對于這種回文串問題,因?yàn)橛辛松厦娴亩x狀態(tài)表示的經(jīng)驗(yàn)所以還是使用一個(gè)二維的dp表解決問題。

1.狀態(tài)表示:dp[i][j]表示在[i,j]這個(gè)區(qū)間內(nèi)使這個(gè)區(qū)間內(nèi)的字符串成為回文串的最小插入次數(shù)。

2.狀態(tài)轉(zhuǎn)移方程:在這里狀態(tài)轉(zhuǎn)移方程還是要分類討論,還是要看s[i],s[j]是否相等:

動(dòng)態(tài)規(guī)劃學(xué)習(xí)——最長回文子序列,讓字符串變成回文串的最小插入次數(shù),動(dòng)態(tài)規(guī)劃算法學(xué)習(xí),動(dòng)態(tài)規(guī)劃,學(xué)習(xí),算法,學(xué)習(xí)筆記,c++

在第二種情況下要取兩者的較小值。

代碼:

由以上思路寫出代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-766773.html

class Solution {
public:
    int minInsertions(string s) {
         
         int n = s.size();
         vector<vector<int>>dp(n,vector<int>(n));

         for(int i = n-1;i>=0;i--)//有dp[i][j] = dp[i+1][j]+1的情況,所以要從下到上遍歷
         {
            for(int j = i;j<n;j++)
            {
                if(s[i] == s[j])
                {
                    if(j>i) dp[i][j] = dp[i+1][j-1];//只有一個(gè)字符不用搞了
                }
                else
                {
                    dp[i][j] = min(dp[i+1][j],dp[i][j-1])+1;
                }
            }
         }

         return dp[0][n-1];

    }
};

到了這里,關(guān)于動(dòng)態(tài)規(guī)劃學(xué)習(xí)——最長回文子序列,讓字符串變成回文串的最小插入次數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?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)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

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

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

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

    2024年02月11日
    瀏覽(26)
  • 劍指offer(C++)-JZ48:最長不含重復(fù)字符的子字符串(算法-動(dòng)態(tài)規(guī)劃)

    劍指offer(C++)-JZ48:最長不含重復(fù)字符的子字符串(算法-動(dòng)態(tài)規(guī)劃)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處 題目描述: 請從字符串中找出一個(gè)最長的不包含重復(fù)字符的子字符串,計(jì)算該最長子字符串的長度。 數(shù)據(jù)范圍: ?s.length≤40000?s.length≤40000 示例: 輸入: 返回值: 說明

    2024年02月06日
    瀏覽(25)
  • 動(dòng)態(tài)規(guī)劃-最長的回文序列

    動(dòng)態(tài)規(guī)劃-最長的回文序列

    該題是lintcode上 667 · 最長的回文序列,該題的解題思路亦是參考了九章侯老師的解題思路給出。 給一字符串 s, 找出在 s 中的最長回文子序列的長度. 你可以假設(shè) s 的最大長度為 1000. 輸入: “bbbab” 輸出: 4 解釋: 一個(gè)可能的最長回文序列為 “bbbb” 輸入: “bbbbb” 輸出:

    2024年02月09日
    瀏覽(24)
  • 【五一創(chuàng)作】( 字符串) 409. 最長回文串 ——【Leetcode每日一題】

    【五一創(chuàng)作】( 字符串) 409. 最長回文串 ——【Leetcode每日一題】

    難度:簡單 給定一個(gè)包含大寫字母和小寫字母的字符串 s ,返回 通過這些字母構(gòu)造成的 最長的回文串 。 在構(gòu)造過程中,請注意 區(qū)分大小寫 。比如 \\\"Aa\\\" 不能當(dāng)做一個(gè)回文字符串。 示例 1: 輸入:s = “abccccdd” 輸出:7 解釋: 我們可以構(gòu)造的最長的回文串是\\\"dccaccd\\\", 它的長度是

    2024年02月01日
    瀏覽(19)
  • ( 動(dòng)態(tài)規(guī)劃) 516. 最長回文子序列 ——【Leetcode每日一題】

    ( 動(dòng)態(tài)規(guī)劃) 516. 最長回文子序列 ——【Leetcode每日一題】

    難度:中等 給你一個(gè)字符串 s ,找出其中最長的回文子序列,并返回該序列的長度。 子序列定義為:不改變剩余字符順序的情況下,刪除某些字符或者不刪除任何字符形成的一個(gè)序列。 示例 1: 輸入:s = “bbbab” 輸出:4 解釋:一個(gè)可能的最長回文子序列為 “bbbb” 。 示例

    2024年02月06日
    瀏覽(29)
  • 每天一道leetcode:516. 最長回文子序列(動(dòng)態(tài)規(guī)劃&中等)

    每天一道leetcode:516. 最長回文子序列(動(dòng)態(tài)規(guī)劃&中等)

    給你一個(gè)字符串 s ,找出其中最長的回文子序列,并返回該序列的長度。 子序列定義為:不改變剩余字符順序的情況下,刪除某些字符或者不刪除任何字符形成的一個(gè)序列。 1 = s.length = 1000 s 僅由小寫英文字母組成 動(dòng)態(tài)規(guī)劃 ,使用二維dp數(shù)組記錄[i,j]間的最大回文子序列長度

    2024年02月13日
    瀏覽(22)
  • 264.【華為OD機(jī)試真題】最長子字符串的長度(二)(動(dòng)態(tài)規(guī)劃DP-Java&Python&C++&JS實(shí)現(xiàn))

    ??點(diǎn)擊這里可直接跳轉(zhuǎn)到本專欄,可查閱頂置最新的華為OD機(jī)試寶典~ 本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼(JavaPythonC++JS分別實(shí)現(xiàn)),詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年02月20日
    瀏覽(26)
  • 算法打卡day49|動(dòng)態(tài)規(guī)劃篇17| Leetcode 647. 回文子串、516.最長回文子序列

    算法打卡day49|動(dòng)態(tài)規(guī)劃篇17| Leetcode 647. 回文子串、516.最長回文子序列

    Leetcode 647. 回文子串 題目鏈接:647. 回文子串 大佬視頻講解:647. 回文子串視頻講解 ?個(gè)人思路? 這道題的dp數(shù)組有點(diǎn)難找到關(guān)聯(lián),以至于遞歸關(guān)系也不好找,所以看題解吧... 解法 動(dòng)態(tài)規(guī)劃 動(dòng)規(guī)五部曲: 1.確定dp數(shù)組(dp table)以及下標(biāo)的含義 一般在定義dp數(shù)組的時(shí)候 會(huì)根據(jù)題

    2024年04月22日
    瀏覽(30)
  • 【算法訓(xùn)練-字符串 三】最長公共子串、最長公共子序列

    【算法訓(xùn)練-字符串 三】最長公共子串、最長公共子序列

    廢話不多說,喊一句號(hào)子鼓勵(lì)自己:程序員永不失業(yè),程序員走向架構(gòu)!本篇Blog的主題是【】,使用【】這個(gè)基本的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),這個(gè)高頻題的站點(diǎn)是: CodeTop ,篩選條件為: 目標(biāo)公司+最近一年+出現(xiàn)頻率排序 ,由高到低的去 牛客TOP101 去找,只有兩個(gè)地方都出現(xiàn)過才做

    2024年02月09日
    瀏覽(22)
  • 最長回文子序列問題的原理與實(shí)現(xiàn):動(dòng)態(tài)規(guī)劃的又一經(jīng)典應(yīng)用

    回文是指一個(gè)正著讀和反著讀都一樣的字符串,比如 “aba” , “racecar” , “madam” 等?;匚挠性S多有趣的性質(zhì)和應(yīng)用,比如在密碼學(xué),生物信息學(xué),數(shù)據(jù)壓縮等領(lǐng)域都有涉及。 那么,給定一個(gè)字符串,如何找出它的最長回文子序列呢?最長回文子序列是指從原字符串中刪

    2023年04月13日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包