資料結構中的棧,在解決很多問題都有用處,比如括号比對,迷宮求解,表達式求值等等
java中有封裝好的類,可以直接調用:
Stack:
1-->public Stack()建立一個空堆棧
2-->public boolean empty()測試堆棧是否為空;
3-->public E pop()移除堆棧頂部的對象,并作為此函數的值傳回該對象。
4-->public E push(E item)把項壓入堆棧頂部
5-->public E peek()檢視堆棧頂部的對象,但不從堆棧中移除它。
6-->public boolean empty()測試堆棧是否為空
結合一道題目:
括号配對問題
- 描述
- 現在,有一行括号序列,請你檢查這行括号是否配對。
- 輸入
- 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字元串S(S的長度小于10000,且S不是空串),測試資料組數少于5組。資料保證S中隻含有"[","]","(",")"四種字元 輸出
- 每組輸入資料的輸出占一行,如果該字元串中所含的括号是配對的,則輸出Yes,如果不配對則輸出No 樣例輸入
-
3 [(]) (]) ([[]()])
樣例輸出 -
No No Yes
代碼:
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
String s;
for (int i = 0; i < N; i++) {
s = scan.next();
if (isMatch(s)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
private static boolean isMatch(String s) {
Stack<Character> sk = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
sk.push('(');
}
if (s.charAt(i) == ')') {
if (!sk.isEmpty() && sk.pop() == '(')
continue;
else
return false;
}
if (s.charAt(i) == '[') {
sk.push('[');
}
if (s.charAt(i) == ']') {
if (!sk.isEmpty() && sk.pop() == '[')
continue;
else
return false;
}
}
if (sk.isEmpty())
return true;
else
return false;
}
}