有效括号
题目描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例:
输入:"()" 输出:true
输入:"()[]{}" 输出:true
输入:"(]" 输出:false
输入:"([)]" 输出:false
输入:"{[]}" 输出:true
输入:"{( )}" 输出:true
输入:"{(( ) )}" 输出:true
方法一:栈
1. 思路图
2. 代码实现
public boolean isValid(String s) {
int length = s.length();
if(length % 2 == 1 && !s.contains(" ")) return false;
Map<Character, Character> pairs = new HashMap<Character, Character>(){
{
put(')', '(');
put(']', '[');
put('}', '{');
}
};
Deque<Character> stack = new LinkedList<Character>();
for(int i = 0; i < length; i++) {
char c = s.charAt(i);
if(c == ' ')
continue;
if(pairs.containsKey(c)) {
// 右字符,判断是否为一对,然后弹栈
if(stack.isEmpty() || stack.peek() != pairs.get(c))
return false;
// 弹出元素
stack.pop();
} else {
// 左字符,压栈
stack.push(c);
}
}
return true;
}