LeetCode(20) ---[有效的括号](Java)
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(20) ---[有效的括号](Java)相关的知识,希望对你有一定的参考价值。
题目来源链接:有效的括号
题目说明:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例:
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
思路:
首先排除字符串长度为奇数的情况;将左边的字符’{’ ‘(’ ‘[’ 入栈; 剩余的字符’}’ ‘)’ ']'和进入栈中的元素在出栈时进行比较;不符合的都返回false;最终结束时还需判断是否空栈;
class Solution {
public boolean isValid(String s) {
//创建栈st;
Stack<String> st = new Stack<>();
//首先排除字符串长度为奇数的情况;
if (s.length() % 2 == 1) {
return false;
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
//将字符串s中的字符一个一个获取出来;
char c = s.charAt(i);
//将左括号的字符'{' '(' '[' 入栈;
if (c == '{' || c == '[' || c == '(') {
stack.push(c);
} else {
//若此时栈为空;则直接返回false;
if (stack.isEmpty()) {
return false;
} else {
//此时进行出栈操作;
//没有入栈的右括号字符'}' ')' ']'和进入栈中的元素在出栈时进行比较;
char tail = stack.pop();
if (c == '}' && tail != '{') {
return false;
} else if (c == ')' && tail != '(') {
return false;
} else if (c == ']' && tail != '[') {
return false;
}
}
}
}
//最终结束时还需判断是否空栈
return stack.isEmpty();
}
}
以上是关于LeetCode(20) ---[有效的括号](Java)的主要内容,如果未能解决你的问题,请参考以下文章