描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串
例子
思路
- 使用栈,把每个括号依次放进栈,当即将放进栈的括号和栈顶的元素是一对时【先放进去的是左括号,后面比较的是右括号】,则将栈顶元素弹出,否则,将该括号放进栈。
答案 - python
python有list有pop()函数,使用list代替stack
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
d={'(':')','[':']','{':'}'}
for c in s:#字符串中的字符不能直接通过下标进行修改
if len(stack)>0 and c==d.get(stack[-1],'?'):
#c为),},或],top中的应为左括号 ([)()])不是有效的括号
stack.pop()
else:
stack.append(c)
return len(stack)==0
- c++
class Solution {
public:
bool isValid(string s) {
stack<char> st;
unordered_map<char,char> dict={{'(',')'},{'[',']'},{'{','}'}};
for (char c: s)
{
if (!st.empty() && (dict[st.top()]==c))
st.pop();
else
st.push(c);
}
return st.empty();
}
};