使用栈解决表达式括号匹配问题
创作时间:
作者:
@小白创作中心
使用栈解决表达式括号匹配问题
引用
CSDN
1.
https://blog.csdn.net/m0_62531913/article/details/137616921
本文将介绍如何使用栈数据结构来解决表达式括号匹配问题。这是一个经典的算法问题,通常出现在编程竞赛和面试中。通过本文,你将学习到栈的基本操作以及如何将其应用于实际问题的解决。
题目描述
给定一个字符串,判断其中的括号是否匹配。具体来说,就是判断字符串中的每个左括号 '(' 是否都有一个对应的右括号 ')',且括号的顺序正确。
思路分析
使用栈(stack)是解决这类问题的经典方法。栈是一种后进先出(LIFO)的数据结构,非常适合用来处理括号匹配问题。
首先定义一个栈 stack<char> st;
遍历字符串,只需要看左括号和右括号,其他的字符不用考虑。
当字符为左括号时,压栈 st.push(')');
当字符为右括号时,我们看栈是否为空,如果栈为空,括号就不合法。否则,我们出栈 st.pop();
最后当遍历完字符串后,我们看栈是否为空。为空就说明括号合法,否则说明不合法。
代码实现
下面是完整的C++代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
string s; cin >> s;
stack<int> st;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') st.push('(');
else if (s[i] == ')') {
if (st.empty()) {
cout << "NO" << endl;
return 0;
}
st.pop();
}
}
if (st.empty()) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}
热门推荐
巴比伦发明、希腊演绎、中国流行:十二星座的跨文明之旅
长宁县竹文化探秘:跟着报告游蜀南竹海
虾滑成年夜饭新宠:从经典到创意的7种美味做法
弱智吧竟成最佳中文AI训练数据?!中科院等:8项测试第一
从汉奸到起义将领:吴化文的晚年终获救赎
从劳山到直罗镇:东北军西北军三战三败后不再“剿共”
心血管疾病死亡率超癌症,专家推荐五大预防措施
中医药保健法:传统智慧助力现代健康管理
古玉收藏防坑指南:专家详解年代判断与真伪识别
草根班底吸粉千万,短视频让传统综艺焕发新生
适合懒人的“家务技巧”,不费时不费力轻松搞定家务,太实用了!
电熨斗会把衣服熨坏吗?警告这四大危害要害!
长安夺魁笔绘西行:穿越千年,重现大唐风华
陈法拉法国度假,圣诞节温馨全家福
陈法拉:从TVB到好莱坞,伊维族女王的无声突破
陈法拉戛纳红毯造型PK张曼玉:现代简约风vs经典优雅
三亚海岛雨林游玩攻略:探险雨林谷,寻找最美三亚雨林
万托林使用误区大揭秘
吃饭,暴露了多少低素质的白领
大学宿舍相处指南:这些禁忌一定要注意
三亚后海攻略一日游:探索海南秘境,畅游蔚蓝海域
探访北京后海与什刹海:同源不同风情的独特魅力!
周末打卡自贡:盐博、恐龙馆、彩灯公园
打卡成都自贡,探秘巴蜀文化宝藏
成都到自贡自驾游攻略,省钱省心!
成都到自贡最新交通攻略:高铁、自驾、长途汽车全解析
探访多尔衮故居:普度寺的历史密码
多尔衮:清朝最强摄政王的权力游戏
揭秘多尔衮与多铎:权力斗争中的兄弟关系
盘古神话:从创世英雄到文化符号