九度题目:1528
题目描述:
回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
回文子串,顾名思义,即字符串中满足回文性质的子串。
给出一个只由小写英文字符a,b,c...x,y,z组成的字符串,请输出其中最长的回文子串的长度。
输入:
输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c...x,y,z组成的字符串,字符串的长度不大于200000。
输出:
对于每组测试用例,输出一个整数,表示该组测试用例的字符串中所包含的的最长回文子串的长度。
样例输入:abab
bbbb
abba样例输出:3
4
4
思路:从字符串头开始,一位一位往后移动,从字符串尾找到和头相同的位置,之间的位置是否都是对称,如果是则为回文,否则不是。
代码:
-
#include <iostream>
-
#include <string>
-
using namespace std;
-
-
class Test
-
{
-
public:
-
int longHuiData(string str)
-
{
-
if (str == "")
-
return 0;
-
-
int max = 1;
-
int len = str.length();
-
int tail ;
-
int tmp_tail;
-
int head;
-
int tmp_head;
-
bool equal;
-
-
for (tail = 0; tail < len; tail++)
-
{
-
head = len - 1;
-
equal = false;
-
while ( (tail < head) && (str[head] != str[tail]) )
-
head --;
-
-
tmp_tail = tail;
-
tmp_head = head;
-
while (tmp_tail < tmp_head)
-
{
-
if (str[tmp_tail] == str[tmp_head])
-
equal = true;
-
else
-
break;
-
-
tmp_tail ++;
-
tmp_head --;
-
}
-
-
if (equal == true)
-
{
-
if ( (head - tail + 1) > max )
-
max = (head - tail + 1);
-
}
-
}
-
-
return max;
-
}
-
};
-
-
-
int main()
-
{
-
cout<<"hello world"<<endl;
-
string str;
-
int len ;
-
class Test my_test;
-
while ( cin>>str )
-
{
-
cout<<str<<endl;
-
len = my_test.longHuiData(str);
-
cout<<len<<endl;
-
}
-
return 1;
-
}
阅读(726) | 评论(0) | 转发(0) |