小蓝的括号串1(栈,蓝桥云课)
问题描述
小蓝有一个长度为 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();
}
}