给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
C++:注意有坑,若开头就像这种右括号的 :‘]’,所以像我的方法就必须有个判断栈空不空的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Solution { public: bool isValid(string s) { stack<char> stack1; int n=s.size(); if(n==0) return true; for(int i=0;i<n;i++) { if(stack1.empty()) //必须判断开始栈空不空,就是为了如果开头是像这右括号的 :‘]’,把他放入栈中 stack1.push(s[i]); else if(s[i]=='('||s[i]=='['||s[i]=='{') stack1.push(s[i]); else { if((s[i]==')'&&stack1.top()!='(')||(s[i]==']'&&stack1.top()!='[')||(s[i]=='}'&&stack1.top()!='{')) return false; else stack1.pop(); } } if(stack1.empty()) return true; else return false; } }; |