PTA - 回文判断(堆栈)

回文判断 (用堆栈的解法)

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

输入格式:

输入待判断的字符序列,按回车键结束,字符序列长度<20。

输出格式:

输入待判断的字符序列,按回车键结束,字符序列长度<20。

输入样例:

abdba

输出样例:

YES

#include <iostream>          //  或直接使用万能头文件
#include <stack>             //  #include <bits/stdc++.h> 
#include <string>

using namespace std;

int main()
{
    string s;
    getline(cin, s);         //  输入一行待判断的字符串 
 
    stack<char> c_stack;     //  定义一个char类型的堆栈
  
    int i;
    for (i = 0; i < s.size() / 2; i++)   
        c_stack.push(s[i]);   //  将字符串前半部分压入堆栈 

    int start_matching = 0;   //  start_matching:开始匹配的位置 
    if (s.size() % 2 == 0) 
        start_matching = s.size() / 2;
    else
        start_matching = s.size() / 2 + 1;

    for (i = start_matching; i < s.size(); i++)
    {
        if (c_stack.top() == s[i]) 
            c_stack.pop();   
        else if (c_stack.top() != s[i] && !c_stack.empty())
        {
            cout << "NO";
            return 0;
        }
     }
     /*   例 
	    a b d b a  
	       
	    0 1 2 3 4 
	    5  5/2 = 2
 首先:压栈  a b   
 然后:start_matching = s.size() + 1  
      即从下标3开始匹配, 栈顶元素为 b           
 判断:   如果栈顶等于 s[i] 就弹栈
	 如果不等于,直接结束
   */ 
    if (c_stack.empty())  // 如果栈中没有元素,则为回文
  	cout << "YES";
    else
	cout << "NO";
 
    return 0;
}	

猜你喜欢

转载自blog.csdn.net/weixin_43821410/article/details/89306555
PTA
今日推荐