使用栈的思想,左括号入栈,右括号出
import java.util.Deque; import java.util.LinkedList; /** * 输入string中只能含有括号元素Java中有一个类Stack,用于表示栈,但这个类已经过时了。 * Java中没有单独的栈接口,栈相关方法包括在了表示双端队列的接口Deque中,主要有三个方法 */ public class StackTest { public boolean isValid(String s) { Deque<Character> stack = new LinkedList<>(); int index = 0; Character top; while (index < s.length()) { Character c = s.charAt(index); switch (c) { case '(': case '[': case '{': stack.push(c); break; case ')': if (stack.isEmpty()) { return false; } top = stack.getFirst(); if (top == '(') { stack.pop(); }else { return false; } // else if (top == '[' || top == '{') { // return false; // } // else {//如果top是)]} // stack.push(c); //// stack.addFirst(c); // } break; case ']': if (stack.isEmpty()) { return false; } top = stack.getFirst(); if (top == '[') { stack.pop(); } else { return false; } // else if (top == '(' || top == '{') { // return false; // } // else { // stack.push(c); //// stack.addFirst(c); // } break; case '}': if (stack.isEmpty()) { return false; } top = stack.getFirst(); if (top == '{') { stack.pop(); } else { return false; } // else if (top == '[' || top == '(') { // return false; // } // else { // stack.push(c); //// stack.addFirst(c); // } break; default: //非括号元素不用管,直接跳过 // stack.push(c); // return false; } index++; } return stack.isEmpty(); } public static void main(String[] args) { String str = "()"; StackTest stackTest = new StackTest(); boolean result = stackTest.isValid(str); System.out.println(result); } }