Leetcode——Valid Parenthese
#20
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.
这一题明显是使用栈来处理这种括号匹配问题。主要的思路可以理出来,给一个字符串,有以下几种情况:
1. 对于左括号,直接放入栈中
2. 对于右括号,如果栈为空,返回false;如果栈不为空,如果栈顶为匹配的左括号,则成功,将左括号出栈,如果不是匹配的左括号,返回false。
这样就可以很容易的写出代码段:
class Solution {
public:
bool isValid(string s) {
stack<char> stack_p;
for(int i = 0;i < s.size();i++){
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
stack_p.push(s[i]);
else
{
if(stack_p.empty()) return false;
if(s[i] == ')' && stack_p.top() != '(')
return false;
if(s[i] == '}' && stack_p.top() != '{')
return false;
if(s[i] == ']' && stack_p.top() != '[')
return false;
stack_p.pop();
}
}
return stack_p.empty();
}
};
java的代码思路基本是一样的。
- Java
class Solution {
public boolean isValid(String s) {
if(s.length() <= 1)
return false;
Stack<Character> st = new Stack<Character>();
for(int i = 0;i < s.length();i++){
if(s.charAt(i) == '('||s.charAt(i) == '{'||s.charAt(i) == '[')
{
st.push(s.charAt(i));
else
{
if(st.size()==0)
return false;
char top = st.pop();
if(s.charAt(i)==')')
if(top!='(')
return false;
else if(s.charAt(i)=='}')
if(top!='{')
return false;
else if(s.charAt(i)==']')
if(top!='[')
return false;
}
}
return st.isEmpty();
}
- Python
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
parenthese = []
map_parenthese = {')':'(','}':'{',']':'['}
for c in s:
if c in map_parenthese:
if map_parenthese[c] != parenthese.pop()
return false
速度上,python肯定是要慢的。