给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
java解题思路:新建一个map存储 “()[]{}”,这三组括号。另外,左括号和右括号都是成对出现的。符合栈的特点,遇见左括号就入栈,遇见匹配的右括号就出栈。
class Solution {
//存储括号的容器,以键值对的形式
private static Map<Character,Character> useBraket = new HashMap<>();
static {
useBraket.put('(',')');
useBraket.put('{','}');
useBraket.put('[',']');
}
public boolean isValid(String s) {
//存储左括号
Stack<Character> stack = new Stack();
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length; i++) {
//如果时左括号,直接入栈;如果栈为空或者栈顶的括号与当前括号型号不匹配,则说明字符串时无效字符串,直接返回false。
if( useBraket.containsKey(arr[i])){
stack.push(arr[i]);
}else if( stack.isEmpty() || useBraket.get(stack.pop()) != arr[i]){
return false;
}
}
return stack.size() == 0;
}
}