刷题记录22
判断回文字符(栈)
题目描述:
“xyzyx”是一个回文字符串,所谓回文字符 串就是指正读反读均相同的字符序列,如“好书好”、“记笔记”、“aha”和“ahaha”均是回 文,但“ahah”不是回文。
如果是则输出YES,否则输出NO
样例输出:
例:ahaha
YES
代码:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char a[101], char s[101];
int i, len, mid, next, top;
gets(a);//读入一行字符串
len = strlen(a);//求字符串的长度
mid = len/2 - 1;//求字符串的中点
top = 0;//栈的初始化
for (i = 0; i <= mid; i++)//将mid前的字符依次入栈
{
top++;
s[top] = a[i];
}
if (len % 2 == 0)//判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
next = mid + 1;
else
next = mid + 2;
for (i = next; i <= len - 1; i++)//开始匹配
{
if (a[i] != s[top])
{
break;
}
top--;
}
if (top == 0)//如果top的值为0,则说明栈内所有的字符都被一一匹配了
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
**解题思路:**首先我们需要读取字符串,并求出这个字符串的长度,如果一个字符串是回文的话,那么它必须是中间对称的,我们需要求中点mid。我们先将 mid 之前的字符全部入栈。因为这里的栈是用来存储字符的,所以这里用来实 现栈的数组类型是字符数组即 char s[101];,初始化栈很简单,top=0;就可以了。入栈的操作 是 top++; s[top]=x。接下来将当前栈中的字符依次出栈,看看是否能与 mid 之后 的字符一一匹配,如果都能匹配则说明这个字符串是回文字符串,否则这个字符串就不是回文字符串。