初学编程练习题:括号配对问题(Java)
来源:互联网 发布:sqlserver删除历史数据 编辑:程序博客网 时间:2024/06/07 12:52
*问题描述:
现在,有一行括号序列,检查这行括号是否配对。
输入:第一行输入一个数N,表示有N组测试数据,N>0且N<=100。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“,”]”,”(“,”)”四种字符
输出:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出“Yes”,如果不配对则输出“No”*
示例:
输入:
4
[(]
{}
{[)]{}[
([{}])
输出:
No
Yes
No
No
Yes
解决思路:对于这一问题,可以使用栈的思想来解决,将字符串中的每个字符提取,遇到左括号‘{’、‘[’、‘(’,便将其入栈,如果遇到右括号,便将栈顶字符和其配对,如果不配对,则该字符串不满足要求,如果配对成功,便将栈顶字符弹出栈即可。
这里需要注意的几点是:
1.当字符串的长度是奇数时,可以直接判断为不匹配。(不过好像对时间影响不大,不加也可以)
2.当遇到右括号时,需要先判断是否栈为空,不然就GG了,想想整个字符串只有右括号的情况(或者左括号比右括号少)。
3.当然,还要考虑下整个字符串只有左括号的情况(或者右括号比左括号少),即匹配工作做完了,还要判断下栈是否为空(如果里面还有左括号在等着也GG啊)
OK,下面附上代码(我也是初学者啊,所以程序开销并不完美,注释都是中文的…只是解决了问题,欢迎大神指正)
import java.util.*;import java.io.*;public class Main { public static void main(String[] args){ Scanner input=new Scanner(System.in); int N=input.nextInt(); input.nextLine();//清空输入 String[] p=new String[N];//用来标注每一行字符串是否匹配 String[] s=new String[N];//接收字符串 for(int i=0;i<N;i++) s[i]=input.nextLine(); for(int i=0;i<N;i++) if(Match(s[i]))//调用函数,判断是否匹配 p[i]="Yes"; else p[i]="No"; for(int i=0;i<N;i++) System.out.println(p[i]); } public static boolean Match(String s){ if(s.length()%2!=0) return false;//字符串是奇数,不匹配 char[] stack=new char[s.length()]; int top=-1; for(int i=0;i<s.length();i++){ if(s.charAt(i)=='{'||s.charAt(i)=='['||s.charAt(i)=='(') stack[++top]=s.charAt(i); else if(s.charAt(i)==']'){ if(top==-1||stack[top]!='[')//先判断栈是否为空再匹配,top==-1要在前 return false; else top--; } else if(s.charAt(i)==')'){ if(top==-1||stack[top]!='(') return false; else top--; } else if(s.charAt(i)=='}'){ if(top==-1||stack[top]!='{') return false; else top--; } } if(top!=-1) return false;//栈不为空 return true; }}
阅读全文
1 0
- 初学编程练习题:括号配对问题(Java)
- 括号配对问题Java
- ACM 括号配对问题 (Java)
- 括号配对问题JAVA实现
- ACM 括号配对问题 Java
- 括号配对问题(栈)
- 括号配对问题(栈)
- NYOJ 2 括号配对问题(栈)
- ACM(002)括号配对问题(3)
- 括号配对问题(南阳2)
- nyoj2括号配对问题(数据结构---栈)
- NYOJ 2 括号配对问题(数据结构)
- nyoj 括号配对问题(栈)
- 括号配对问题--nyoj-2(栈)
- NYOJ 2 括号配对问题(栈)
- NYoj 2 括号配对问题(栈)
- 括号配对问题(I && II)
- 栈 NYOJ 2 (括号配对问题)
- js Strong.prototype.endsWith 查看某个字符串是不是以另外一个字符串结尾
- 安装以及目录结构
- mysql去重_整理
- session的典型案例一:使用session实现购物车
- nginx 简单正向代理配置
- 初学编程练习题:括号配对问题(Java)
- Dagger2自己的理解
- jquery与php结合实现AJAX长轮询(LongPoll)
- CGLib代理
- PHP实现MYSQL简单的增删改查功能
- Linux chsh命令
- 1、HTML 学习记录——简介
- 从0开始学习cuda和caffe源码阅读
- MyBatis 映射器