声明:题目解法使用c++和python两种,重点侧重在于解题思路和如何将解法用python语言实现。
题目
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
Seen this question in a real interview before?
题意和思路
栈的基本应用。
- 括号左边或者栈为空时进栈。
- 遇到右括号判断是否和栈顶元素匹配。
- 匹配,出栈。
- 不匹配,入栈。
- 最后,栈空为全匹配True,不空为不匹配False。
c++代码
class Solution {
public:
bool isValid(string s)
{
stack<char>q;
char temp;
if(s.size()==1) return false;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty()) q.push(s[i]);
else
{
temp = q.top();
if(s[i]==')'&&temp=='(') q.pop();
else if(s[i]==']'&&temp=='[') q.pop();
else if(s[i]=='}'&&temp=='{') q.pop();
else q.push(s[i]);
}
}
if(q.empty()) return true;
else return false;
}
};
Python代码
在python中使用列表list表示栈的,基本操作如下:
操作 描述
操作 描述
s = [] 创建一个栈
s.append(x) 往栈内添加一个元素
s.pop() 在栈内删除一个元素
not s 判断是否为空栈(为空返回true,不为空返回false)
len(s) 获取栈内元素的数量
s[-1] 获取栈顶的元素
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
#创建一个栈
q = []
for i in range(0,len(s)):
if s[i] == '(' or s[i] == '{' or s[i] == '[' or len(q) == 0:
q.append(s[i])
else:
#取栈顶元素,用list里面的切片,取最后一个元素
temp = q[-1]
if s[i] ==')' and temp=='(':
q.pop()
elif s[i] ==']' and temp=='[':
q.pop()
elif s[i] =='}' and temp=='{':
q.pop()
else:
q.append(s[i])
#返回true为空
if not q:
return True
else:
return False