题目描述(ID:12013)
标题: | 回文串 | ||||
标签: | 数据结构 栈 | ||||
详情: | “xyzyx”是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,如“席主席”、“记书记”、“aha”和“ahaha”均是回文,但“ahah”不是回文。输入一行字符(仅包含小写英文字母a~z)请判断这行字符串是否为回文。 | ||||
输入格式: | | ||||
输出格式: | | ||||
样例: |
|
题解
利用栈“先进后出”的特性,将字符串的前一半存入栈内。其余字符串依次与栈内比较,相符则出栈,栈内空则表示字符串为回文串。
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
string palindrome, s;//初始化字符串和空栈
getline(cin, palindrome);//读入字符串
int i, len, mid, top, next;
len = palindrome.length();//字符串长度
mid = len / 2 - 1;
top = 0;
for(i = 0; i <= mid; i++){
s[++top] = palindrome[i];//前半部分字符串入栈
}
if(len % 2 == 0){
next = mid + 1;//字符串长度为偶数,取相邻字符位置
}
else{
next = mid + 2;
}
for(i = next; i <= len - 1; i++){
if(palindrome[i] != s[top]){//依次与栈内比较,不符则结束
break;
}
top--;
}
if(top == 0){//空栈
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
return 0;
}