有效的括号
给定一个只包括’(‘,’)’,’{‘,’}’,’[‘,’]’的字符串s,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
- 1 <= s.length <= 104
- s 仅由括号 ‘()[]{}’ 组成
Solution
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include <iostream> #include <vector> #include <algorithm> using namespace std;
class Solution { public: bool isValid(string s) { if (s.size() % 2 != 0) { return false; } vector<char> remain; for (int i = 0; i < s.size(); ++i) { switch (s.at(i)) { case '{': case '[': case '(': remain.push_back(s.at(i)); break; case '}': if (remain.empty() || remain.back() != '{') { return false; } remain.pop_back(); break; case ']': if (remain.empty() || remain.back() != '[') { return false; } remain.pop_back(); break; case ')': if (remain.empty() || remain.back() != '(') { return false; } remain.pop_back(); break; default: return false; } } if (remain.size() != 0) { return false; } return true; } };
int main() { std::cout << Solution().isValid("()") << std::endl; std::cout << Solution().isValid("()[]{}") << std::endl; std::cout << Solution().isValid("(]") << std::endl; std::cout << Solution().isValid("([)]") << std::endl; std::cout << Solution().isValid("{[]}") << std::endl; std::cout << Solution().isValid("}{") << std::endl; }
|