题目:
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: “()”
Output: true
Example 2:
Input: “()[]{}”
Output: true
Example 3:
Input: “(]”
Output: false
Example 4:
Input: “([)]”
Output: false
Example 5:
Input: “{[]}”
Output: true
解法:
利用栈,遍历字符串,如果是左括号就入栈,否则先查看栈是否为空,为空返回false,如果是右括号,就查看栈顶元素,如果不是相匹配的左括号,返回false,否则左括号出栈,遍历完成,检查栈,栈为空,返回true,否则返回false
c++:
class Solution {
public:
bool isValid(string s) {
stack<char> sk;
for(int i = 0; i < s.size(); i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
sk.push(s[i]);
} else {
if(sk.empty()) return false;
char temp = sk.top();
if(s[i] == ')' && temp != '(') return false;
if(s[i] == ']' && temp != '[') return false;
if(s[i] == '}' && temp != '{') return false;
sk.pop();
}
}
return sk.empty();
}
};
java:
- Stack首字母大写
- 查看栈顶元素是peek()函数
class Solution {
public boolean isValid(String s) {
Stack<Character> sk = new Stack<>();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{'){
sk.push(s.charAt(i));
} else {
if(sk.empty()) return false;
char temp = sk.peek();
if(s.charAt(i) == ')' && temp != '(') return false;
if(s.charAt(i) == ']' && temp != '[') return false;
if(s.charAt(i) == '}' && temp != '{') return false;
sk.pop();
}
}
return sk.empty();
}
}
Python:
Python中没有栈结构,可以用list实现栈,list.pop([i]) 从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。方法中 i 两边的方括号表示这个参数是可选的
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
stack = []
dict = {"]":"[", "}":"{", ")":"("}
for i in s:
if i in dict.values():
stack.append(i)
else:
if not stack or dict[i] != stack[-1]: return False
stack.pop()
return not stack