题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
利用栈实现,用字典d = {key1 : value1, key2 : value2 }。代码中的key1 key2 key3分别为左括号,他们的值为对应的右括号。
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if not s: # s=''时
return True
d = {'{': '}', '[': ']', '(': ')'} #字典
stack = []
for i in s:
if i in d:#i={ [ (
stack.append(i)
else:
if not stack or d[stack.pop()] != i:#先遇到右括号 或 出栈的右括号不是i的值
return False
else:
if stack:
return False
return True
下面是java
1、栈
class Solution {
public boolean isValid(String s) {
char[] chars=s.toCharArray();
Stack<Character> stack=new Stack<>();
for(int i=0;i<chars.length;i++){
if(chars[i]=='('||chars[i]=='['||chars[i]=='{'){
stack.push(chars[i]);
}
else{
if (!stack.isEmpty() && ((stack.peek() == '(' && chars[i] == ')') || (stack.peek() == '[' && chars[i] == ']') || (stack.peek() == '{' && chars[i] == '}'))) {
stack.pop();
}
else{
return false;
}
}
}
return stack.size()==0?true:false;
}
}
2、哈希表
class Solution {
public boolean isValid(String s) {
HashMap<Character,Character> map=new HashMap<Character,Character>();
map.put('(',')');
map.put('{','}');
map.put('[',']');
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
stack.push(s.charAt(i));
}else if(stack.empty()||map.get(stack.pop())!=s.charAt(i)){
return false;
}
}
return stack.empty();
}
}