蓝桥杯题目:栈的应用

一、题目要求:

小蓝有一个长度为 nn 的括号串,括号串仅由字符 ( 、 ) 构成,请你帮他判断一下该括号串是否合法,合法请输出 Yes ,反之输出 No 。

合法括号序列:

  1. 空串是合法括号序列。

  2. 若 ss 是合法括号序列,则 ( ss ) 也是合法括号序列。

  3. 若 s,ts,t 都是合法括号序列,则 stst 也是合法括号序列。

例如 ()() , (()) , (())() 均为合法括号序列。

输入格式

第一行包含一个正整数 nn ,表示括号串的长度。

第二行包含一个长度为 nn 的括号串。

输出格式

输出共 11 行,若括号串合法请输出 Yes ,反之输出 No 。

二、代码展示:

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取括号串的长度
        int n = scanner.nextInt();
    
        // 读取括号串
        String s = scanner.next();
        
        // 检查长度是否匹配
        if (s.length() != n) {
            return;
        }
        
        // 判断括号串是否合法
        boolean flag = true;
        Stack stack = new Stack<>();
        
        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (stack.isEmpty()) {
                    flag = false;
                    break;
                }
                stack.pop();
            } else {
                // 如果包含其他字符,视为不合法
                flag = false;
                break;
            }
        }
        
        // 如果栈不为空,说明有多余的 '('
        if (flag && stack.isEmpty()) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
}

代码说明:

1. 输入部分:
    首先读取整数 `n`,表示括号串的长度。
    然后读取括号串 `s`。

2. 验证长度:
    检查输入的括号串长度是否与 `n` 相符。如果不相符,输出错误信息并结束程序。

3. 判断合法性:
    使用 `Stack` 来存储 `'('`。
    遍历字符串中的每个字符:
      如果是 `'('`,将其压入栈中。
      如果是 `')'`,检查栈是否为空:
        如果栈为空,说明没有对应的 `'('`,将 `flag` 设为 `false` 并跳出循环。
        如果栈不为空,弹出一个 `'('`。
      如果遇到其他字符,也将 `flag` 设为 `false` 并跳出循环。

4. 输出结果:
    遍历结束后,如果 `flag` 为 `true` 且栈为空,说明所有括号都匹配,输出 `Yes`。
    否则,输出 `No`。

你可能感兴趣的:(蓝桥杯)