问题描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
- 1 <= s.length <= 104
- s 仅由括号 '()[]{}' 组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
解决思路:
入栈出栈核销,新建一个List作为栈,括号头入栈,括号尾出栈。
特殊判断:
字符串长度是否为偶数,由于不包含空格和其他字符,所以奇数长度的字符串是绝对不合格的。
/*
*作者:赵星海
*时间:2021/6/7 14:04
*用途:有效的括号
*/
public boolean isValid(String s) {
if (s.length() % 2 != 0) {
return false;
}
//入栈出栈的思想来看这个需求,就比较简单了。
char[] chars = s.toCharArray();
ArrayList<Character> list = new ArrayList<Character>();
for (char aChar : chars) {
if (aChar == '(' || aChar == '{' || aChar == '[') {
//如果是括号头,则入栈
list.add(aChar);
} else {
if (list.size() == 0) return false;
//如果是括号尾,则先对比,后出栈
switch (aChar) {
case ')':
if (list.get(list.size() - 1) == '(') {
list.remove(list.size() - 1);
} else {
return false;
}
break;
case '}':
if (list.get(list.size() - 1) == '{') {
list.remove(list.size() - 1);
} else {
return false;
}
break;
case ']':
if (list.get(list.size() - 1) == '[') {
list.remove(list.size() - 1);
} else {
return false;
}
break;
}
}
}
return list.size() == 0;
}
leetCode提交结果: