给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
package com.example.order.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
public class Test {
public boolean isValid(String s) {
//使用栈结构 先进后出
//如果是左边的符号 那么进入栈
//如果是右边的符号 那么和栈顶的元素进行匹配
//因为栈顶的元素 刚好是最后一个进来的 和下一个元素 能够匹配上 所以使用栈
Stack<Character>stack=new Stack<>();
for (int i = 0; i < s.length(); i++) {
char a=s.charAt(i);
if(a=='(' || a=='[' || a=='{'){
stack.push(a);
}else if(a==')'){
if(!stack.isEmpty() && stack.peek()=='('){
//如果栈顶是左括号 那么匹配上了 直接出栈
stack.pop();
}else {
//否则 没有匹配上
return false;
}
}else if(a==']'){
if(!stack.isEmpty() && stack.peek()=='['){
//如果栈顶是左括号 那么匹配上了 直接出栈
stack.pop();
}else {
//否则 没有匹配上
return false;
}
}else if(a=='}'){
if(!stack.isEmpty() && stack.peek()=='{'){
//如果栈顶是左括号 那么匹配上了 直接出栈
stack.pop();
}else {
//否则 没有匹配上
return false;
}
}
}
//如果栈里面还有数据 那么肯定是没有匹配成功 返回flase
return stack.isEmpty();
}
public static void main(String[] args) {
String s = "()[]{}";
//输出:true
System.out.println(new Test().isValid(s));
}
}