使用栈解决表达式括号匹配问题
创作时间:
作者:
@小白创作中心
使用栈解决表达式括号匹配问题
引用
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;
}
热门推荐
地肤子当归猪蹄汤:中医调理脂溢性脱发的食疗方案
胡萝卜食疗,拯救你的脂溢性脱发!
北京协和医院教你安全用消炎药
伴侣间的沟通小技巧,你get到了吗?
名爵5车主必看:正确添加冷却液教程
蓬莱阁摄影攻略:9个最佳拍摄点详解
秋冬蓬莱长岛游:完美路线大揭秘!
《和平精英》圈外扛毒技巧全攻略:从入门到精通
和平精英:决赛圈抗毒流新玩法揭秘!
遇到威胁怎么办?法律教你正确应对
面对非法威胁,教你如何保持冷静
葫芦兄弟红娃:力大无穷的童年英雄
羊肉馅饺子制作技巧:掌握“1放2不放”,告别膻味,鲜香四溢
脂溢性皮炎的科学治疗与日常护理
吃这些水果,远离脂溢性皮炎!
脂溢性皮炎 vs 脱发:你真的了解吗?
脂溢性皮炎的心理重负:如何科学应对与调适
马拉色菌:脂溢性皮炎的罪魁祸首?
《光荣使命》Kar98K狙击技巧大揭秘!
从战场到游戏:98k狙击步枪的传奇之旅
掌握98k狙击技巧,《和平精英》轻松吃鸡!
冬日雪地摄影:从准备到拍摄的全面技巧指南
批判性思维:提升决策智慧与竞争力
古法素圈手镯:从历史传承到现代演绎
玉珠手链佩戴指南:左手还是右手?以及不同场合的搭配建议
行星史视角下的地球演化:跨学科研究的新突破
世界地球日:揭秘地球五颜六色的演化史
米兰科维奇理论:解密地球气候的宇宙节拍
酸枣仁粉走红背后:科学原理、使用效果与注意事项全解析
安徽产酸枣仁粉,助你一夜好眠!