Описание
дано только включает в себя «(», «)» строка, «{», «}», «[», «]», и определить , является ли строка действительна.
Действительно строка должна соответствовать:
Левый кронштейн должен быть закрыт закрывающей скобкой того же типа.
Левая скобка должна быть закрыта в правильном порядке.
Обратите внимание на пустую строку , можно считать действительной строкой
Примеры
идей
- Используйте стек, каждый из кронштейнов превращаются в стек, когда стек элементов , входящих в скобках и верхней части стека первые пары один [перейти в левой скобки, с последующим сравнением закрывающей скобки], то верхний элемент поп-вверх, в противном случае, скобки в стек.
ответ - питон
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();
}
};