括号匹配
栈的应用,比如平时用的word等文档中撤销功能,可以想想。
package club.wujingjian;
import java.util.Scanner;
public class Stack {
/**
* 栈结构
* 输入一堆括号,看是否括号符合匹配
* (a(b)c) 匹配
* (((fd))()) 不匹配
* (a(b)c)) 不合法
* 思路:
* 栈是先进后出的
* 如果遇到左括号 进栈处理
* 如果遇到又括号 判断栈是否为空,不为空则出栈一下;如果为空,说明当前右括号无匹配的左括号(判定为不合法)
* 所有输入都遍历完了,判断栈是否为空,如果为空则说明合法匹配,否则说明括号非成对出现.
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inputStr = scanner.nextLine();
StackData data = new StackData(inputStr.length());
for (int i = 0; i < inputStr.length(); i++) {
String tmp = inputStr.charAt(i)+"";
if (tmp.equals("(")) {
data.push(tmp);
} else if (tmp.equals(")")) {
if (!data.isEmpty()) {
data.pop();
} else {
System.out.println("不合法的括号匹配");
return;
}
}
}
if (data.isEmpty()) {
System.out.println("合法");
} else {
System.out.println("不合法");
}
}
static class StackData {
private String[] items;
private int count = 0;
public StackData(int length){
items = new String[length];
}
public void push(String item) {
items[count++] = item;
}
public void pop (){
return items[--count];
}
public boolean isEmpty(){
return count ==0;
}
public String getTopElement(){
int t = count;
return items[t-1];
}
}
}