问题描述
小蓝有一个长度为 nn 的括号串,括号串仅由字符
(
、)
构成,请你帮他判断一下该括号串是否合法,合法请输出Yes
,反之输出No
。合法括号序列:
空串是合法括号序列。
若 ss 是合法括号序列,则
(
ss)
也是合法括号序列。若 s,ts,t 都是合法括号序列,则 stst 也是合法括号序列。
例如
()()
,(())
,(())()
均为合法括号序列。输入格式
第一行包含一个正整数 nn ,表示括号串的长度。
第二行包含一个长度为 nn 的括号串。
输出格式
输出共 11 行,若括号串合法请输出
Yes
,反之输出No
。样例输入1
10 (()(()))()
样例输出1
Yes
样例输入2
5 ()()(
样例输出2
No
import java.util.Scanner;
import java.util.Stack;public class TheKHOfXiaoLan {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 读取输入的字符数量scanner.nextLine(); // 消耗换行符String input = scanner.nextLine(); // 读取整行输入if (fun(input)) {System.out.println("Yes");} else {System.out.println("No");}}public static boolean fun(String input) {Stack<Character> stack = new Stack<>();for (char ch : input.toCharArray()) {if (ch == '(') {stack.push(ch); // 遇到左括号,入栈} else if (ch == ')') {if (stack.isEmpty() || stack.pop() != '(') {// 如果栈为空或栈顶不是左括号,说明不匹配return false;}}}// 如果栈为空,说明所有括号都匹配return stack.isEmpty();}
}