最長回文子串的長度
時間限制(普通/Java) : 1000 MS/ 3000 MS 運作記憶體限制 : 65536 KByte
總送出 : 391 測試通過 : 84
比賽描述
輸入一個字元串,求出其中最大回文子串的長度。子串的含義是:在原串中連續出現的字元串片段。回文的含義是:正着看和倒着看相同,如abba和yyxyy。在判斷時,應該忽略所有标點符号和空格,且忽略大小寫,但輸出應保持原樣(在回文串的首部和尾部不要輸出多餘字元)。
輸入
輸入字元串長度不超過5000,且占據單獨的一行。
輸出
輸出最長回文串的長度,該回文串不包括所有标點符号和空格。
樣例輸入
Confuciuss say: Madam,I'm Adam.
樣例輸出
11
提示
undefined
題目來源
NUPT
tring>
using namespace std;
int main(){
int i,j,n,max;
string s;
getline(cin,s);
n=(int)s.length();
for(i=0,j=0;i<n;i++){
if(s[i]>='a' && s[i]<='z'){
s[j++]=s[i];
}else if(s[i]>='A' && s[i]<='Z'){
s[j++]=s[i]-'A'+'a';
}
}
n=j;
max=1;
for(i=1;i<n;i++){
for(j=1; i-j>=0 && i+j<n && s[i+j]==s[i-j]; j++);
j--;
if(max<2*j+1){
max=2*j+1;
}
for(j=1; i-j>=0 && i-1+j<n && s[i-j]==s[i-1+j]; j++);
j--;
if(max<2*j){
max=2*j;
}
}
cout<<max<<endl;
}