描述

回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。

输入

多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。

输出

对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。

输入样例 1

abba
abdba
good
0

输出样例 1

YES
YES
NO

思路:

所谓回文字符串就是指把这个字符串倒过来还是和以前一样,比如“level”就是一个回文字符串~

采用两个栈,分别按正序和倒序存取字符串的每一位(注意string类型中,单独的每一个字符都是char类型,所以要用char类型的栈),都输入完毕以后再对其每个字符进行比较即可。

代码中,Empty函数判断当前的栈是否已空,Pop函数弹栈的同时,也返回弹出来的该字符。

代码如下:

#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<cmath>
#include<set>
#include<algorithm>
using namespace std;
typedef struct Stack
{char s;struct Stack* next;
}*linkstack, SNode;
void Init(linkstack& s)
{s = NULL;
}
void Insert(linkstack& l,char x)
{linkstack p = new SNode;p->s = x;p->next = l;l = p;
}
bool Empty(linkstack s)
{if (s == NULL)return true;return false;
}
char Pop(linkstack& l)
{if (l == NULL)return 0;linkstack p;char e = l->s; p = l;l = l->next;delete p;return e;
}
void Compare(linkstack s1, linkstack s2)
{while (!Empty(s1)){if (Pop(s1) != Pop(s2)){cout << "NO" << endl;return;}}cout << "YES" << endl;
}
int main()
{string s;cin >> s;while (s != "0"){linkstack s1, s2;Init(s1);Init(s2);for (int i = 0; i < s.length(); i++){Insert(s1,s[i]);//string的每一个字符都是单独的char}for (int i = s.length() - 1; i >= 0; i--)Insert(s2, s[i]);Compare(s1, s2);cin >> s;}return 0;
}

2003基于栈的回文字符序列判断(C++)相关推荐

  1. 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]

    传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...

  2. 数据结构——用栈解决回文字符问题

    回文 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文.试写一个算法判定给定的字符序列是否为 ...

  3. 题目2 : 回文字符序列(区间DP)

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a& ...

  4. [动规] hihocoder 1149 回文字符序列

    题目大意 原题链接,给定字符串求回文子序列数量.字符串长度 $len \leq 1000 $. 算法思路 题干比较简单,而且数据量不大,很容易想到使用递推,关键在于如何定义递推中间值和递推式.博主做题 ...

  5. 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。

    内容: 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文.编写一个程序,使用栈判定给定的字符 ...

  6. python找出字符串中的最长回文串子序列

    回文串,即: nums = 'aba' print(nums == nums[::-1]) # True 反转该序列后和之前元素相等 这里我们需要找出给定字符串里的最长回文串,即: nums = 'a ...

  7. 回文字符(第一周技术分享)

    第一篇博客就来写一下这次面试婷婷学姐问我的一个问题吧! 最开始我只会用最笨的办法把每位上的数字都写出来 再去比较首末是否相等去判断是否为回文数. #include <stdio.h> in ...

  8. C++ 栈实现回文数判断

    C++ 栈实现回文数判断 #include<iostream> #include<string> using namespace std; class Point{char d ...

  9. C语言_回文字符串的判断

    C语言_回文字符串的判断 程序目的 键盘任意输入一字符串,判断其是否会回文串. 设计思路 由于C语言中,字符串保存与char类型数组中,并且数组为随机存取结构.因此,可以设置前后标记a,b.参数a从0 ...

最新文章

  1. I need to follow my heart.
  2. AVAssetExportSession导出MP4视频失败
  3. HASHSET不能预留容量问题
  4. wxWidgets:实时传输时间RTTI
  5. SAP Spartacus的User明细如何通过ngrx-store-devtools被解析出来
  6. 【开源项目】基于FFmpeg的PCM数据编码为AAC
  7. 决策树分类算法matlab,matlab实现的C45分类决策树算法
  8. linux mysql 保护_linux – 在Puppet中,我如何保护密码变量(在这种情况下是MySQL密码)?...
  9. 嵌入式linux学习笔记--linux的消息队列的坑
  10. python画椭圆形_如何绘制Python中的半椭圆?
  11. 推挽电源的基本工作原理、磁通不平衡问题及其解决方法
  12. 【opencv 450 Image Processing】Image Moments 图像矩
  13. 炒币碰到熊市的应对方法,炒币者的八大口诀
  14. Android 底层知识拾零,字节跳动Android高级工程师
  15. ureport 显示html,Ureport2报表使用问题及注意事项汇总
  16. [bzoj2150] 部落战争 二分图
  17. MaxCompute(ODPS)实现笛卡尔积
  18. android 开发资料汇总
  19. 【微信易信公众平台开发】开启开发者模式
  20. 学习python不知不觉一个月了

热门文章

  1. antd 能自适应吗_Antd表格滚动 宽度自适应 不换行的实例
  2. python输入多个数字 找出只出现一个的数字_在python数组中找到接近给定数字的多个值...
  3. Linux的useradd
  4. Python | 多种编码文件(中文)乱码问题解决
  5. JavaScript学习系列之执行上下文与变量对象篇
  6. echart模块化单文件引入
  7. System.Int32是个啥?
  8. Flutter SliverAnimatedOpacity 透明渐变动画效果
  9. React基础篇(二)之点击button修改属性值
  10. 精通Android自定义View(十六)invalidate方法和requestLayout方法