给定一个字符串所表示的括号序列,包含以下字符: '(', ')'
, '{'
, '}'
, '['
and ']'
, 判定是否是有效的括号序列。
样例
括号必须依照 "()"
顺序表示, "()[]{}"
是有效的括号,但 "([)]"
则是无效的括号。
解题思路:
先利用map建立左括号与右括号的映射关系
利用栈的思想,当栈为空或遇到左括号,压入栈中;否则,判断栈顶的元素是否是相对应的左括号,若是则弹出栈顶元素,若不是则返回false;
注意判断栈顶的元素是否是相对应的左括号时,首先需要对map映射进行判空处理,防止都是右括号时,map映射返回为Null出现空指针异常。
public class Solution {
/**
* @param s: A string
* @return: whether the string is a valid parentheses
*/
public boolean isValidParentheses(String s) {
// write your code here
if(s == null || s.length() == 0)
return true;
if(s.length()%2 == 1)
return false;
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
if(stack.isEmpty() || c == '(' || c == '{' || c == '[')
stack.push(c);
else{
//防止 '}])'出现空异常
if(map.get(stack.peek()) == null || map.get(stack.peek()) != c)
return false;
stack.pop();
}
}
return stack.isEmpty();
}
}