【题目】
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
【示例 1】
输入:s = “()”
输出:true
【示例 2】
输入:s = “()[]{}”
输出:true
【示例 3】
输入:s = “(]”
输出:false
【示例 4】
输入:s = “([)]”
输出:false
【示例 5】
输入:s = “{[]}”
输出:true
【提示】
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
【代码】
【CPP】
执行用时:
4 ms, 在所有 C++ 提交中击败了39.49%的用户
内存消耗:
6.2 MB, 在所有 C++ 交中击败了73.80%的用户
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for(auto c:s)
//if 栈非空
if(!st.empty()){
char topchar=st.top();
if((topchar=='(' && c==')')||(topchar=='{'&&c=='}')||(topchar=='['&&c==']')){
st.pop();
}else
st.push(c);
}else//如果栈空 则字符入栈
st.push(c);
return st.empty();
}
};
【Python】
python中list列表可以充当stack栈使用
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2 == 1:
return False
pairs = {
")": "(",
"]": "[",
"}": "{",
}
stack = list()
for ch in s:
if ch in pairs:
if not stack or stack[-1] != pairs[ch]:
return False
stack.pop()
else:
stack.append(ch)
return not stack