zoukankan      html  css  js  c++  java
  • STL应用 stack 计蒜客 T1655

    栈的应用。 stack 栈的存储和操作如图:

    栈的存储性质是先入后出 ,最先进入栈的数据在栈的下面,反而是后进入的数据在栈的上面
    如果有出栈的操作,后进入的数据先出栈

    这里以计蒜客 T1655 介绍栈的使用

    给出一个表达式,该表达式仅由字符(、)、+、-以及数字组成。
    请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES";否则返回"NO"。
    
    输入格式
    一行一个表达式,长度不超过
    2000
    
    输出格式
    若匹配,则输出"YES";否则输出"NO"
    
    Sample Input
    2+(3-4)-2-6)
    Sample Output
    NO
    

    解答
    遍历检测输入的字符串
    使用栈来记录遇到的括号 如果是'('则入栈
    如果遇到的是')' , 则将栈中顶点的'('弹出配对。 栈顶点不是'('或者栈为空,那么就说明无法匹配
    如图

    代码

    #include <iostream>
    #include <string>
    #include <stack>
    using namespace std;
    
    int main()
    {
    	string s;
    	cin >> s;
    	stack<char> ss;
    	for (auto& e : s) {
    		if (e == '(') {
    			ss.push('(');
    		}
    		else if (e == ')') {
    			if (!ss.empty() && ss.top() == '(') {
    				ss.pop();
    			}
    			else {
    				cout << "NO" << endl;
    				return 0;
    			}
    		}
    	}
    	if (ss.empty()) {
    		cout << "YES" << endl;
    	}
    	else {
    		cout << "NO" << endl;
    	}
    	return 0;
    }
    
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    创建被访问的swf文件
    BFS寻路算法的实现
    Flex里的命名空间,fx、mx、s【转】
    Flex的基础用法【转】
    Pow(x, n)
    Roman to Integer
    Integer to Roman
    Divide Two Integers
    Single Number II
    Single Number I
  • 原文地址:https://www.cnblogs.com/itdef/p/15086702.html
Copyright © 2011-2022 走看看