給你乙個字串 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...