烟大 2242: 回文(栈和队列)

2242: 回文(栈和队列)

Time Limit: 1 Sec  Memory Limit: 1000 MB

Submit: 2  Solved: 2

[Submit][Status][Web Board]

Description

 假设称正读和反读都相同的字符序列为“回文”,例如,‘abba‘ 和 ‘abcba‘是回文,‘abcde‘ 和 ‘ababab‘ 则不是回文。试写一个算法判别读入的一个以‘@‘为结束符的字符序列是否是“回文”。

Input

abcba

Output

是回文

Sample Input

ababab

Sample Output

不是回文

HINT

Source


Code:

 1 //与相同序列那道题差不多。将字符依次压入栈中,拿出来的时候就是倒序比较了。
 2 
 3 #include <iostream>
 4 #include <cstring>
 5 #include <stack>
 6 using namespace std;
 7 int main()
 8 {
 9     string l;
10     while(cin>>l){
11         int i;
12         stack <char> s;
13         for(i=0;i<l.length();++i)
14             s.push(l[i]);    //将所有字符压到栈中
15         //因为是后进先出,所以从栈中去元素的时候是倒序取出的
16         //所以依次将栈中取出的元素和字符串从尾到头依次比较
17         for(i=0;i<l.length();++i){
18             if(s.top()!=l[i])
19                 break;
20             s.pop();    //如果相等,抛出当前元素
21         }
22         //因为是将字符串中字符依次压栈的,所以长度相同,不需要判断是否栈空
23         if(i==l.length())
24             cout<<"是回文"<<endl;
25         else
26             cout<<"不是回文"<<endl;
27     }
28     return 0;
29 }
View Code

Freecode : www.cnblogs.com/yym2013

原文地址:https://www.cnblogs.com/yym2013/p/3255212.html