20. 有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
示例 4:
输入:s = "([)]" 输出:false
示例 5:
输入:s = "{[]}" 输出:true
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
解析:
水题,栈即可
class Solution { public: stack<char> ss; bool isValid(string s) { // int a[3]; // memset(a, 0, sizeof(a)); // for(int i = 0; i < s.length(); i++) // { // if(s[i] == '(') a[0]++; // else if(s[i] == ')') a[0]--; // else if(s[i] == '{') a[1]++; // else if(s[i] == '}') a[1]--; // else if(s[i] == '[') a[2]++; // else a[2]--; // } // if(a[0] == 0 && a[1] == 0 && a[2] == 0) return true; // return false; for(int i = 0; i < s.length(); i++) { if(s[i] == '(' || s[i] == '[' || s[i] == '{') ss.push(s[i]); else { if(s[i] == ')') { if(ss.empty() || ss.top() != '(') return false; ss.pop(); } else if(ss.empty() || s[i] == ']') { if(ss.empty() || ss.top() != '[') return false; ss.pop(); } else if(s[i] == '}') { if(ss.empty() || ss.top() != '{') return false; ss.pop(); } } } if(ss.empty()) return true; return false; } };