力扣刷題 5 最長回文子串

2021-10-18 07:31:04 字數 1151 閱讀 1428

給你乙個字串 s,找到 s 中最長的回文子串。

(回文串就是正著讀和反著讀都一樣的字串)

class

solution}}

return maxhuiwen;

}bool

ishuiwen

(const string &s)

return

false;}

};

整體思路

先構造乙個判斷字串是否是回文串的函式。對於給定的字串s,找出該s的所有子串,呼叫回文判斷函式找出最長的回文子串。

class

solution

for(size_t i =

0; i < lenth; i++

)else

dp[i]

[j]=

false;}

}//當使用遞減for迴圈時,不能使用unsigned i>=0;

for(

int i = lenth-

1; i >=

0; i--)}

}}}return maxhuiwen;}}

;

整體思路

對於乙個回文串,它的首尾字元是相同的。並且在去掉首尾字元後,剩下的字元組成的字串還是乙個回文串。利用這個性質進行動態規劃。

首先初始化dp表,設定給定字串中長度為1的子串為回文串,也就是true。

狀態轉移:對於str[i,j] (從i開始到j結束) 的字元子串。如果第i位和第j位的字元首尾相同,並且從i+1到j-1的子串是回文串,則該子串為回文串。

從dp表的尾端開始構造到頭端,最後將整個dp表構造完畢。

1、重新熟悉了動態規劃的思想和dp表的構建

2、對於遞減的for迴圈,不能用unsigned i 以及 i>0 來控制迴圈的結束。因為unsigned始終大於0.此時只能使用int來控制for迴圈的結束。

3、二維陣列的動態申請方法:

bool

** dp;

dp =

newbool

*[lenth]

;//提前給定乙個lenth

for(size_t i =

0; i < lenth; i++

)

最長回文子串 力扣5

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 利用回文字串的特點 正著讀和反著讀都是一樣的,所以首先把s反轉,利用i和j控制左右邊界,不斷從s中擷取...

力扣 5 最長回文子串

題目 和647類似 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 題解 方法一 面試題,要求最長只能一趟迴圈 中心擴散法 class solutio...

力扣題庫 5 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 從中心向兩端尋找,最終得到最大的字串 找單數最大,如為回文,則長度為 2 itmp 1 itmp so...