给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度。回文就是正反读都是一样的字符串,如aba,abba等(17分)
样例输入:
2
aaaa
abac
样例输出:
4
3
思路:回文就利用栈和队列的特性,用队头元素和栈顶元素比较。然后细化一下剪枝条件。
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int HuiWen(char *str){
queue<char> queue;
stack<char> stack;
char s_temp[127];
int j = 0;
for(int i =0 ;i<strlen(str);i++){
queue.push(str[i]);
}
for(int i =0 ;i<strlen(str);i++){
stack.push(str[i]);
}
while(!stack.empty()){
char s_now;
if(stack.top()!=queue.front()){
stack.pop();
continue;
}
s_now=stack.top();
s_temp[j++]=s_now;
queue.pop();
stack.pop();
}
s_temp[j]='\0';
cout<<strlen(s_temp)<<endl;
return 0;
}
int main(){
int num;
cin>>num;
for(int i = 0;i<num;i++){
char * str=(char *)malloc(sizeof(char *));//用cin会报错,不知道为什么但是由于时间紧迫没有深究,留个坑。
cin>>str;
HuiWen(str);
}
return 0;
}
测试: