描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses/
求解
class Solution {
public:
// 方法一,使用栈
bool isValid_1e(string s) {
std::stack<char> rec;
for (const char c : s) {
if (c == '}') {
if (rec.empty() || rec.top() != '{') {
return false;
}
rec.pop();
continue;
}
if (c == ']') {
if (rec.empty() || rec.top() != '[') {
return false;
}
rec.pop();
continue;
}
if (c == ')') {
if (rec.empty() || rec.top() != '(') {
return false;
}
rec.pop();
continue;
}
rec.emplace(c);
}
return rec.empty() ? true : false;
}
// 方法二,代码优化
bool isValid(string s) {
std::stack<char> rec;
for (const char c : s) {
if (pairs.count(c) > 0) {
if (rec.empty() || rec.top() != pairs[c]) {
return false;
}
rec.pop();
continue;
}
rec.emplace(c);
}
return rec.empty() ? true : false;
}
private:
std::unordered_map<char, char> pairs{{')', '('},
{']', '['},
{'}', '{'}};
};