题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 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/problems/valid-parentheses
此题考察的点:栈的运用。
使用栈可以简单快速且通俗易懂的解决这题。
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
Stack<Character> ch = new Stack<>();
//flag 初始化为true
boolean flag = true;
//对字符串进行遍历
for (int i = 0; i < s.length(); i++) {
//x获取当前字符
char x = s.charAt(i);
//若x=='(','[','{',则将相对应的另半边压栈
if (x == '(') {
ch.push(')');
}
if (x == '[') {
ch.push(']');
}
if (x == '{') {
ch.push('}');
}
//若x==')',']','}',则弹栈
if (x == ')' || x == ']' || x == '}') {
//若栈为空,则说明一定有')' , ']' , '}' 多余,修正flag=false
if (ch.empty()) {
flag = false;
break;
}
//若栈顶元素不与x相等,则说明括号不匹配,修正flag=false 如: x='(' , 栈顶:']'
if (x != ch.pop()) {
flag = false;
break;
}
}
}
//字符串遍历完,若栈内存在元素,则说明有括号多余,修正flag=false
if (!ch.empty()) {
flag = false;
}
return flag;
}
}