問題描述
小藍有一個長度為?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();}
}
?