括号匹配的检验(数据结构实训)

题目:

括号匹配的检验
标准输入输出
题目描述:
采用栈实现,练习进栈入栈函数的编写.
输入:
输入的第一行包含一个数,n
n表示要用例的个数
接下来是n行由括号构成的字符串,包含‘(’、‘)’、‘[’、‘]’。

输出:
对每一测试用例,用一行输出结果,如果匹配,输出“YES”,否则输出“NO”

输入样例:
2
[([][]())]
)[]()

输出样例:
YES
NO

代码:

题目的左右小括号是中文的,但是使用应该是英文的,一开始我用方法一写没写出来,还以为是题目的问题,于是写了方法二,后来找到了方法一的错误,现在的方法一是正确的

方法一(普通方法):

import java.util.Scanner;
public class Xingyuxingxi {
    public static void main(String[] args) {
        int a;
        Scanner sc = new Scanner(System.in);
        String b;
        a = sc.nextInt();
        while (a-- != 0) {
            b = sc.next();
            int zxk = 0;
            int zzk = 0;
            int cnt=0;
            for (int i = 0; i < b.length()-1; i++) {
                if((b.charAt(i)=='('&&b.charAt(i+1)==']')||(b.charAt(i)=='['&&b.charAt(i+1)==')'))
                {
                    cnt=1;
                    break;
                }
            }
            if(cnt==0) {
                for (int i = 0; i < b.length(); i++) {
                    if (b.charAt(i) == '(') {
                        zxk++;
                    }
                    if (b.charAt(i) == ')') {
                        zxk--;
                    }
                    if (b.charAt(i) == '[') {
                        zzk++;
                    }
                    if (b.charAt(i) == ']') {
                        zzk--;
                    }
                    if (zxk < 0 || zzk < 0) {
                        break;
                    }
                }
            }
            if ( cnt == 0&&zxk == 0 && zzk == 0) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
}

/*
当时卡在样例
(([))]
此时输出应该为NO
在我写栈方法时检查了出来
*/

方法二(栈):

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

public class Xingyuxingxi {
    public static void main(String[] args) {
        Stack<Character>zhan =new Stack<Character>();
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        String b;
        while (a--!=0)
        {
            b=sc.next();
            for (int i = 0; i <b.length() ; i++) {
                char s=b.charAt(i);
                if(i!=0&&((s==')'&&zhan.peek()=='(')||(s==']'&&zhan.peek()=='[')))
                {
                    zhan.pop();
                }
                else
                {
                    zhan.push(s);
                }
            }
            if(zhan.isEmpty())
            {
                System.out.println("YES");
            }
            else
            {
                System.out.println("NO");
            }
            zhan.clear();
        }
    }
}
/*
peek()方法,调用栈顶元素
pop()方法,删除栈顶元素
isEmpty()方法,判断栈是否为空
clear()方法,清空栈
*/

 

 

相关推荐

  1. 括号匹配检验(数据结构)

    2023-12-08 04:04:02       52 阅读
  2. 三元组快速转置(数据结构)

    2023-12-08 04:04:02       44 阅读
  3. 哈希查找(数据结构)

    2023-12-08 04:04:02       64 阅读
  4. 循环队列(数据结构)

    2023-12-08 04:04:02       55 阅读
  5. 折半查找(数据结构)

    2023-12-08 04:04:02       65 阅读
  6. 顺序查找(数据结构)

    2023-12-08 04:04:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 04:04:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 04:04:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 04:04:02       87 阅读
  4. Python语言-面向对象

    2023-12-08 04:04:02       96 阅读

热门阅读

  1. K8s基础

    K8s基础

    2023-12-08 04:04:02      56 阅读
  2. chatgpt用到哪些算法

    2023-12-08 04:04:02       54 阅读
  3. ElasticSearch之cat nodeattrs API

    2023-12-08 04:04:02       64 阅读
  4. 将linux服务器 设置成 proxy.SOCKS5 服务器

    2023-12-08 04:04:02       50 阅读
  5. 算法基础之n-皇后问题

    2023-12-08 04:04:02       70 阅读
  6. 如何使用PDCA循环来提升软件产品的质量

    2023-12-08 04:04:02       51 阅读