这一段时间工作不是特别忙,重拾下刷题的乐趣,期间发现了一道题,是一个括号排序的问题,原题如下
刚开始看着题感觉毫无思路,自己试着写了解题方法,我原来的思路是取得最前面的字符,然后和下一个进行比较,如果是”(“那么下一个不是“)”就是错误的,对于“【”就看时候后面有对应的内容,这个对了就下一个,开始写的时候发现逻辑特别绕,而且加的if判断有好多个,想想会不会有好点的方法呢?
于是就开始在网上看别人的解题方法,结果发现了个很严重的问题,别人直接用的是栈方法,通过栈几行代码就解出来了,看完也是对自己笨笨的脑子感到着急,这是别人的代码,抄一下
package ACM;
import java.util.Scanner;
import java.util.Stack;
public class 括号对应答案 {
public static void main(String[] args) {
for (int i = 0; i < 6; i++) {
boo();
}
}
public static void boo(){
System.out.println("请输入一个特殊字符【】()中的一个");
Scanner sacnner =new Scanner(System.in);
String str=sacnner.next();
Stack<Character> stack = new Stack<Character>();
// 如果该String长度为奇数,不匹配
if (str.length() % 2 == 1) {
System.out.println("No");
} else {
stack = new Stack<Character>();
for (int i = 0; i < str.length(); i++) {
if (stack.isEmpty()) {
stack.push(str.charAt(i)); // 当前栈是空的 存入当前位置的字符
} else if ((stack.peek() == '[' && str.charAt(i) == ']')
|| (stack.peek() == '(' && str.charAt(i) == ')')) {
stack.pop(); // 满足上面的条件 表示相邻的两个字符是一对匹配的括号 进行出栈操作
} else {
stack.push(str.charAt(i));
}
}
if (stack.isEmpty()) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
}
事实证明我基本功很差,对于栈的不理解,所以没想到,潜意识也不想用栈这种方法,在那重复造轮子,所以借助这次机会将栈好好学学