0%

NYOJ-2-栈的运用

NYOJ-2-栈的运用

今天刚学java集合,学到了栈,就拿这道题练练手吧。


题目描述

1
2
输入描述
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)” 四种字符
1
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

解题思路

最近刚学了Deque,可以使用栈解决这个问题。
思路:获取到”)”、”]”,就比对,不是就压栈,最后判断是否为空。后续有更好思路再补代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class OJ2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
String arr[] = new String[num];
for (int i = 0; i<num;i++){arr[i]=in.next();}
for (int i = 0; i<num;i++){
String s = judge(arr[i]);
System.out.println(s);
}
}
public static String judge(String s){

Deque<String> deque = new LinkedList<>();
for (int i =0;i<s.length();i++){
deque.offerLast(s.substring(i,i+1));
if (deque.peekLast().equals(")")){
if (deque.size()==1){return "No";}
deque.pollLast();
if (deque.peekLast().equals("(")){deque.removeLast();}
else {return "No";}
}
else if(deque.peekLast().equals("]")){
if (deque.size()==1){return "No";}
deque.pollLast();
if (deque.peekLast().equals("[")){deque.removeLast();}
else {return "No";}
}
}
if (deque.size()==0){return "Yes";}else {return "No";}
}
}



学到了比较值需要使用 .equals()