[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 }

 

你可能感兴趣的:(job)