20.有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

思路

  • 建立一个栈
  • 字符长度不能被二整除,则不匹配
  • 首先左括号直接入栈
  • 接着不是左括号且为空,则不匹配
  • 右括号则出栈,判断是否匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.wereash.scut_hot100;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

/**
* @Author: WereAsh
* @Date:2026-01-23 20:17
**/
public class Solution020 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
Deque<Character> stack=new ArrayDeque<>();
for(int i=0;i<str.length();i++){
char a=str.charAt(i);
if (a=='('||a=='['||a=='{'){
stack.push(a);
}else {
if(stack.isEmpty()){
System.out.println("括号不匹配!");
return;
}
char temp=stack.pop();
if(!isCompare(temp,str.charAt(i))){
System.out.println("括号不匹配");
return;
}
}
}
if (stack.isEmpty())
System.out.println("括号匹配");
else System.out.println("括号不匹配");

}
private static boolean isCompare(Character a,Character b){
if(a=='('&&b==')'){
return true;
}else if (a=='['&&b==']'){
return true;
}else if (a=='{'&&b=='}'){
return true;
}else return false;
}

}