给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答: 使用栈结构,遇到左括号,就压栈;遇到右括号,比较前一位(peek),如果是成对的括号,就弹栈。 如果都是成对的,最后栈应该是空的。
class Solution {
public boolean isValid(String s) {
char[] chars = s.toCharArray();
if(chars.length%2 != 0){
return false;
}
Stack<Character> stack = new Stack();
for(int i = 0; i < chars.length; i++){
char c = chars[i];
Character peek = null;
if(stack.isEmpty()){
stack.push(c);
continue;
}else {
peek = stack.peek();
stack.push(c);
}
if(c == ')' && peek == '('){
stack.pop();
stack.pop();
}
else if(c == ']' && peek == '['){
stack.pop();
stack.pop();
}
else if(c == '}' && peek == '{'){
stack.pop();
stack.pop();
}
}
return stack.isEmpty();
}
}