演算法筆記 問題 A 字串 最長回文子串

2021-10-05 18:01:49 字數 2067 閱讀 1071

輸入乙個字串,求出其中最長的回文子串。子串的含義是:在原串中連續出現的字串片段。回文的含義是:正著看和倒著看相同。如abba和yyxyy。在判斷回文時,應該忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣(在回文串的首部和尾部不要輸出多餘字元)。輸入字串長度不超過5000,且佔據單獨的一行。應該輸出最長的回文串,如果有多個,輸出起始位置最靠左的。

輸入一行字串,字串長度不超過5000。

輸出字串中的最長回文子串。

樣例

輸入:

confuciuss say:madam,i'm adam.

輸出:madam,i'm adam

解題思路:

使用動態規劃求解

dp[i][j] 表示字串下標為 i 到下標為 j 的子串為回文子串。

注意:1、需要將所有的空格,逗號之類的非字母的字元去掉

2、需要將所有字元都變為小寫或者大寫

3、輸出的時候,需要輸出原來的字串中的子串,即需要輸出空格,逗號之類的字元。

4、若存在多個相同長度的回文子串,則需要輸出最左邊的子串,如abab,需要輸出aba,而不是bab。

具體過程:

1、讀入字串

2、去掉字串中的非字母的字元並將其他字母轉換為小寫(或者大寫)

3、在轉換的過程中,需要記錄每個字母所對應的原來字串中的位置

4、之後就是求解乙個字串中的最長回文子串,與 leetcode5—最長回文子串 解法相同。

下面為ac**:

/*

* @description: problem a 【字串】最長回文子串

* @author:

* @date: 2020-05-04 16:13:17

* @lastedittime: 2020-05-04 17:01:13

* @lasteditors: please set lasteditors

*/#include

#include

#include

using

namespace std;

const

int max_n =

5010

;string str;

//表示輸入的字串

char temp[max_n]

;//表示去掉空格,逗號,以及都變成小寫的字串

int dp[max_n]

[max_n]

;//dp[i][j] 表示字串下標為 i 到下標為 j 是回文串

int index[max_n]

;//表示儲存temp字串下標在str中的本來的位置,方便輸出列印逗號以及空格

intmain()

if(str[i]

>=

'a'&& str[i]

<=

'z')

}//此時temp陣列中存放的都是小寫字母

//下面用正常的求解最長回文子串的解法即可

int start =0;

int max_length =1;

//表示最長回文字串的長度

int max_current =1;

//表示當前最長回文字串的長度

fill

(dp[0]

, dp[0]

+ max_n * max_n,0)

;int len = j;

// //len 表示 temp 陣列的長度

for(

int i =

0; i < len; i++)}

}}//下面為狀態轉換方程

for(

int l =

3; l <= len; l++)}

}}//輸出最長回文子串

for(

int i = index[start]

; i <= index[start + max_current -1]

; i++

) cout << endl;

}//system("pause");

return0;

}

最長回文子字串演算法

def is palindrome s if len s 1 return true else return s 0 s 1 and is palindrome s 1 1 眾所周知,寫遞迴的函式,需要 1 個基本情況,作為終止。還需要 1 個遞迴情況。關於回文字串的判斷,基本情況是,為 1 個字元...

問題 A 字串 最長回文子串

輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串中連續出現的字串片段。回文的含義是 正著看和倒著看相同。如abba和yyxyy。在判斷回文時,應該忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣 在回文串的首部和尾部不要輸出多餘字元 輸入字串長度不超過5000,且佔據單獨的一行。應該...

字串 最長回文子串

最長回文子串 回文子串 即正著看和倒著看相同的子串,如 abcba yyxyy。由於此類題目為面試筆試常考題目,所以現在就來整理一下啦。1 暴力求解法 最直接的想法就是暴力求解,但是我們可以看到下面的 時間複雜度是o n 3 string findlongeststring string str 暴...