给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
思路:因为是按顺序闭合所以对于右括号如果栈顶不一样的话就是没有按顺序闭合
所以遍历字符串,碰到左括号就push.右括号看跟栈顶是否相同即可
最后注意遍历之后是否为空,不为空也是没有闭合
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Solution 2 { 3 public: 4 bool isValid(string s) 5 { 6 stack <char> st; 7 8 for(int i=0; i<s.length(); i++) 9 { 10 char c=s[i]; 11 if(c=='(') 12 st.push(')'); 13 else if(c=='[') 14 st.push(']'); 15 else if(c=='{') 16 st.push('}'); 17 else 18 { 19 if(st.empty()||st.top()!=c) 20 { 21 return false; 22 } 23 else st.pop(); 24 } 25 } 26 return st.empty(); 27 } 28 };