括号配对问题-java:Stack
题目描述:
输入描述:
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),
测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
输出描述:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入:
3
[(])
(])
([[]()])
样例输出:
No
No
Yes 解题思想:就是用一个stack,称为栈类。遇到左括号就压栈,否则,将这个元素与栈顶元素比较,如果相等,则消去栈顶元素。否则,不匹配。
我写完就提交了,没想到超时,需要做些判断条件。
代码实现如下:
package Combat.com; import java.util.Enumeration;
import java.util.Scanner;
import java.util.Stack; public class Main
{
public static void main(String []args)
{
Scanner cin = new Scanner(System.in);
int N = cin.nextInt();
for(int i = 0; i < N; i++)
{
String str = cin.next();
AchieceStack(str);
}
}
static void AchieceStack(String str)
{
if(str.charAt(0) == ']' || str.charAt(0) == ')')//第一个就出现不匹配
{
System.out.println("No");
return;
}
Stack stack = new Stack();
int len = str.length();
stack.push(str.charAt(0));
for(int i = 1; i < len; i++)
{
if(str.charAt(i) == '[' || str.charAt(i) == '(')//左括号压栈
{
stack.push(str.charAt(i));
}
else//右括号判断
{
if(stack.empty() || stack.size() > len-i)//特殊判断条件。
{
System.out.println("No");
return;
}
char c = (char) stack.peek();
if(c == '[' && str.charAt(i) == ']')
{
stack.pop();
}
else if(str.charAt(i) == ')' && c == '(')
{
stack.pop();
}
else
{
System.out.println("No");
return;
}
}
/*Enumeration items=stack.elements();//这部分代码用来检验的,很重要
//显示枚举(stack)中的所有元素
while(items.hasMoreElements())
{
System.out.print(items.nextElement()+"");
}
System.out.println();*/
}
if(!stack.empty())
{
System.out.println("No");
}
else
{
System.out.println("Yes");
}
}
}
括号配对问题-java:Stack的更多相关文章
- Num 15: NYOJ: 题目0002 : 括号配对问题 [ 栈(stack) ]
原题连接 首先要了解有关栈的一些基本知识,即: 什么是栈,栈有什么作用: 1.什么是栈: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...
- ACM:UESTC - 649 括号配对问题 - stack
UESTC - 649 括号配对问题 Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu ...
- 括号配对问题_栈<stack>
问题 A: 括号配对问题 时间限制: 3 Sec 内存限制: 128 MB提交: 3 解决: 2[提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行 ...
- nyoj 2 括号配对问题(stack)
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0& ...
- NYOJ之括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N&l ...
- stl-stack+括号配对问题
栈:stl的一种容器,遵循先进后出原则,,只能在栈的顶部操作,就像放盘子一样,洗好的盘子叠在上面,需要用时也是先从顶部拿.不允许被遍历,没有迭代器 基本操作: 1.头文件#include<sta ...
- ACM 括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=1 ...
- hdoj 2 括号配对问题【数组模拟实现+STL实现】
栈遵循先进后出的原则 括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0 ...
- nyoj 2 括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0& ...
随机推荐
- Ubuntu14.04 安装 Sublime Text 3
Linux下安装,一种办法是从官网下载 tar.bz ,手动安装.另一种是使用apt-ge安装 这里介绍用 apt-get 自动安装方法: 1.添加sublime text 3的仓库: sudo ad ...
- 关于JDBC学习过程中的注意事项(分享自己犯过的错误,写给初学JDBC的小伙伴的八条建议)
关于JDBC学习过程中的注意事项(分享自己犯过的错误,写给初学JDBC的小伙伴的八条建议) 前言:最近在学习JDBC,总结了几个小问题,特地分享给大家,让大家不要犯这样的错误,也希望大家养成学会总结的 ...
- JDK源码——单例模式
JDK源码中单例模式的应用 1.Runtime类 Runtime类封装了Java运行时的环境.每一个java程序实际上都是启动了一个JVM进程,那么每个JVM进程都是对应这一个Runtime实例,此实 ...
- 服务器怎么安装mysql数据库
有些小伙伴们想自己玩玩服务器.可以买了服务以后,发现服务器就是一个大框子,没有数据存储.啥都没有,这时候就需要各种软件操作来逐步安装这些东西, 一.使用的工具:xshell(从官网上下载),目的是得使 ...
- Gitlab安装、汉化及使用
环境:centos 关闭防火墙和selinux [root@Gitlab ~]# setenforce [root@Gitlab ~]# service iptables stop && ...
- WIN10下微信崩溃(已经是最新版)的解决方法
微信运行错误---------------------------你的微信崩溃次数较多,建议使用最新版本,点击"确定"到官网(http://pc.weixin.qq.com/)下载 ...
- ElasticSearch(八)Elasticsearch-head 连接不上Elasticsearch的原因和解决方案
在上篇博文里ElasticSearch(七) Elasticsearch在Centos下搭建可视化服务中已经访问到了可视化界面.然后兴奋地进行了数据提交测试,提交啊,刷新啊,就是看不到数据变化,仔细一 ...
- 【题解】Luogu P2347 砝码称重
正经·DP题解 一道非常好的背包练手题( sto(注:原思路来源 SLYZ_0120 的题解)orz 开始这道题 1.输入六个数,存进数组中 2.初始化 f 数组为0. f [ i ] 表示重量为 i ...
- 记一次JAVAWEB项目部署
需求 原本服务器上tomcat部署了一个javaweb项目在80端口,这次要部署另一个javaweb项目在8090端口,或者同时部署在同一端口不同目录下. 解决方法 不同端口部署 不同端口部署我们需要 ...
- MySQL表结构更新规范
以下以新增字段为例,修改.删除.新增表的操作类似: 步骤: 1.PDM(中文名称为产品数据管理(Product Data Management))增加字段,并注明新增字段的注释 2.数据库编写sql语 ...