题目要求:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
思路:用栈实现比较容易。每逢左括号进栈,每逢右括号,先判断栈是否为空,非空就出栈。如果出栈的元素与相应的右括号匹配,则置标志为true,否则为false且跳出循环。最后如果标志为true且栈为空,则返回true。
代码:<span style="font-weight: normal;">public boolean isValid(String s) {
Stack<Character> ls = new Stack<Character>();//定义一个Character型的栈
char[] c = s.toCharArray();//将字符串转换成字符数组
Character[] c1 = new Character[c.length];
boolean flag = true;//标志
begin: for (int i = 0; i < c1.length; i++) {
c1[i] = c[i];// 自动装箱(将char数组转换成Character数组)
char b;//用于存放出栈的元素
switch (c1[i]) {
case '(': //左括号进栈
ls.push(c1[i]);
break;
case '[': //左括号进栈
ls.push(c1[i]);
break;
case '{': //左括号进栈
ls.push(c1[i]);
break;
case ')': //右括号出栈
if (!ls.isEmpty()){ //判断栈是否为空
b = ls.pop();
if (b == '('){ //判断是否匹配
flag = true;
break;
}
else{
flag = false;
break begin;
}
}
else{
flag=false;
break begin;
}
case ']':
if (!ls.isEmpty()){
b = ls.pop();
if (b == '['){
flag = true;
break;}
else{
flag = false;
break begin;
}
}
else{
flag=false;
break begin;
}
case '}':
if (!ls.isEmpty()){
b = ls.pop();
if (b == '{'){
flag = true;
break;}
else{
flag = false;
break begin;
}
}
else{
flag=false;
break begin;
}
}
}
return flag&&ls.isEmpty() ;//返回结果
}</span>
<span style="font-weight: normal;">public boolean isValid(String s) {
Stack<Character> ls = new Stack<Character>();//定义一个Character型的栈
char[] c = s.toCharArray();//将字符串转换成字符数组
Character[] c1 = new Character[c.length];
boolean flag = true;//标志
begin: for (int i = 0; i < c1.length; i++) {
c1[i] = c[i];// 自动装箱(将char数组转换成Character数组)
char b;//用于存放出栈的元素
switch (c1[i]) {
case '(': //左括号进栈
ls.push(c1[i]);
break;
case '[': //左括号进栈
ls.push(c1[i]);
break;
case '{': //左括号进栈
ls.push(c1[i]);
break;
case ')': //右括号出栈
if (!ls.isEmpty()){ //判断栈是否为空
b = ls.pop();
if (b == '('){ //判断是否匹配
flag = true;
break;
}
else{
flag = false;
break begin;
}
}
else{
flag=false;
break begin;
}
case ']':
if (!ls.isEmpty()){
b = ls.pop();
if (b == '['){
flag = true;
break;}
else{
flag = false;
break begin;
}
}
else{
flag=false;
break begin;
}
case '}':
if (!ls.isEmpty()){
b = ls.pop();
if (b == '{'){
flag = true;
break;}
else{
flag = false;
break begin;
}
}
else{
flag=false;
break begin;
}
}
}
return flag&&ls.isEmpty() ;//返回结果
}</span>