力扣题目链接:20. 有效的括号 - 力扣(LeetCode)
分析:主要是如何判断括号是满足题意的,有哪几种组合是不满足题意的。
根据分析,我们知道括号的成对满足栈的特性,所以借助栈来解决题目。
1:当右括号多余时,如 )))不满足题意
2:当左括号多余时,如(((也不满足题意
3:当括号不多余时,括号不匹配,如[ ( ] ),同样不满足题意
由此将不符合题意的选出。
实现代码如下:
- class Solution {
- public:
- bool isValid(string s)
- {
- //若括号长度为奇数时,不满足题意
- if(s.size()%2!=0)
- {
- return false;
- }
- //定义一个栈
- stack<char> sta;
- //有三种情况不符合题意
- //1.左括号多余。2.右括号多余。3.括号不多于但是括号不匹配,如[(])
- for(int i = 0;i <s.size();i++)
- {
- if(s[i] == '(')
- {
- sta.push(')');
- }
- else if(s[i] == '[')
- {
- sta.push(']');
- }
- else if(s[i] == '{')
- {
- sta.push('}');
- }
- //2.右括号多余。3.括号不多于但是括号不匹配,如[(])
- else if(sta.empty() || s[i] !=sta.top())
- {
- return false;
- }
- else{
- sta.pop();
- }
- }
- //1.左括号多余。
- return sta.empty();
- }
- };
运行结果如下: