题目要求我们判断给定字符串s中所包含的三种括号形式是否合理。 合理的形式:() , ()[]{} ,{()}等。 不合理形式:({)} ,([)]等。
解题思路: 用堆栈的方式,碰到左半边括号就入栈,右半边括号判断栈顶元素是否跟当前括号对应。如果对应就将栈顶元素做出栈处理。否则直接return false.所有元素遍历之后判断栈是否为空。为空return true,否则return false.下面代码中用数组模拟栈。
tip :‘{’与‘}’对应,‘[’与 ‘]’对应,‘(’与‘)’对应。
解题代码:
public class Solution { public boolean isValid(String s) { int cur = 0; //取10000,太大会出现内存不足,太小会不够用 int[] stack = new int[10000]; for (int i = 0; i < s.length(); i++) { switch (s.charAt(i)) { //用1,2,3 来代表'{','(','[' case '{': stack[cur] = 1; cur++; break; case '(': stack[cur] = 2; cur++; break; case '[': stack[cur] = 3; cur++; System.out.println("["); break; case '}': if (cur == 0) { return false; } if (stack[cur - 1] != 1) { return false; } cur--; stack[cur] = 0; break; case ')': if (cur == 0) { return false; } if (stack[cur - 1] != 2) { return false; } cur--; stack[cur] = 0; break; case ']': if (cur == 0) { return false; } if (stack[cur - 1] != 3) { System.out.println("}f"); return false; } System.out.println("]"); cur--; stack[cur] = 0; break; default: break; } } //stack[0] = 0 代表stack为空。 if (stack[0] == 0) { return true; } return false; } }