给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’,的字符串,判断字符串是否有效。有效字符串满足:
1. 左括号必须用相同类型的右括号闭合。
2. 括号必须以正确的顺序闭合。
利用栈算法可以很好的解决这个问题,下面是我写的代码:
import java.util.LinkedList;
public class Demo {
static public boolean action(String s) {
LinkedList<Character> queue = new LinkedList<Character>();
char ch[] = s.toCharArray();
for (int i = 0, length = ch.length; i < length; i++) {
char a = ch[i];
if (a == '{' || a == '(' || a == '[') {
queue.push(a);// 压入栈
} else {
if (queue.size() == 0) {// 如果栈是空的
return false;
}
char b = 0;
switch (a) {
case '}':
b = '{';
break;
case ')':
b = '(';
break;
case ']':
b = '[';
break;
default:
return false;
}
Character top = queue.poll();// 弹出栈顶值
if (top != b) {
return false;
}
}
}
return queue.size() == 0;
}
public static void main(String[] args) {
System.out.println(action("{()[][{()}][]}"));
}
}
这段代码针对不同字符串的结果如下表:
字符串 | 结果 |
{} | true |
()[]{} | true |
{()[][{()}][]} | true |
{) | false |
{(])} | false |
{(}[)] | false |
( | false |