[Jobdu] 题目1528:最长回文子串

题目描述:

回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
回文子串,顾名思义,即字符串中满足回文性质的子串。
给出一个只由小写英文字符a,b,c...x,y,z组成的字符串,请输出其中最长的回文子串的长度。

 

输入:

输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c...x,y,z组成的字符串,字符串的长度不大于200000。

 

输出:

对于每组测试用例,输出一个整数,表示该组测试用例的字符串中所包含的的最长回文子串的长度。

 

样例输入:
abab
bbbb
abba
样例输出:
3
4
4

 

腾讯面试题,max_len初始为1,设为0会出错。

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int get_lps_len(string &s, int a, int b) {
 6     int len = (a == b) ? -1 : 0;
 7     while (a >= 0 && b < s.length() && s[a] == s[b]) {
 8         --a; ++b;
 9         len += 2;
10     }
11     return len;
12 }
13 
14 int main() {
15     string s;
16     int max_len, cur_len;
17     while (cin >> s) {
18         max_len = 1;
19         for (int i = 0; i < s.length() - 1; ++i) {
20             cur_len = get_lps_len(s, i, i);
21             max_len = max_len > cur_len ? max_len : cur_len;
22             cur_len = get_lps_len(s, i, i + 1);
23             max_len = max_len > cur_len ? max_len : cur_len;
24         }
25         cout << max_len << endl;
26     }
27     return 0;
28 }

 

posted @ 2014-04-01 20:09  Eason Liu  阅读(283)  评论(0编辑  收藏  举报