您的位置:首页 > 编程语言 > Java开发

第二道题:括号配对问题

2016-05-14 21:35 381 查看
这道题着实费了我不少时间(90分钟==。),问题的关键是怎么全面判断括号是否配对,我原来的思路是比较各个括号的个数,毫无疑问,这会漏掉许多情况,比如 ] [ 、[ ( ] )…然后我就打算直接比较字符串,由两边到中间,一 一比较,但这仍然会漏掉一些情况,比如 ([]) 。穷途末路的我不得不求助搜索引擎,发现堆栈是个好东西啊(虽然之前在Java里面没用过,但看完文档后,很快就上手了),有了这个结构,这个问题就很好解决了!

我先判断字符串长是否为偶数,如果是偶数,就用堆栈进行判定,然后每次循环判断栈顶字符是否与当前字符一致(peek),若一致,就弹出(pop),最后判断堆栈是否为空(其实和很多人的思路都差不多,我也是看了一眼别人的代码才有思路的 :) ,但是这些代码可是我自己独立完成的,2333)

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

public class Main {

public static void main(String[] args) {
Scanner input =new Scanner(System.in);
Stack<Character> s = new Stack<Character>();
int n = input.nextInt();
input.nextLine();
String[] a = new String
;
for(int i=0;i<n;i++){
a[i]=input.nextLine();
}
for(int i=0;i<n;i++){
if(a[i].length()%2!=0){
System.out.println("No");
}else {
for(int j=0;j<a[i].length();j++){
if(s.isEmpty()){
s.push(a[i].charAt(j));
}else if((s.peek()=='['&&a[i].charAt(j)==']')||(s.peek()=='('&&a[i].charAt(j)==')')){
s.pop();
}
else {
s.push(a[i].charAt(j));
}

}
if(s.isEmpty()){
System.out.println("Yes");
}else {
System.out.println("No");
}
s.clear();
}

}

input.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java