题目要求我们判断给定字符串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;
}
}