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