题目描述:给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列。括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
解题思路:借助栈,左括号入栈,右括号与栈顶元素进行匹配,如果匹配成功,则进行下一组,如果匹配不成功,则返回false
代码:
import java.util.Stack;
public class FortyfourIsvalid {
public boolean isValid(String s) {
//辅助栈
Stack<Character> c = new Stack<>();
for (int i = 0; i < s.length(); i++) {
//判断每一个字符
switch (s.charAt(i)) {
//如果是左括号,包括 ( [ { ,则入栈
case '(':
case '[':
case '{':
c.push(s.charAt(i));
break;
//如果是 ) ,则查看栈顶是否为空或者是 (
case ')':
//如果为空,且不是 ( ,说明没有匹配成功,返回false
if (c.isEmpty() || c.peek() != '(')
return false;
//如果匹配成功,则弹出 (
c.pop();
break;
case ']':
//如果为空,且不是 [ ,说明没有匹配成功,返回false
if (c.isEmpty() || c.peek() != '[')
return false;
//如果匹配成功,则弹出 [
c.pop();
break;
case '}':
//如果为空,且不是 { ,说明没有匹配成功,返回false
if (c.isEmpty() || c.peek() != '{')
return false;
//如果匹配成功,则弹出 {
c.pop();
break;
}
}
//如果最后栈为空,则说明全部匹配完毕,返回true,如果不为空,则说明没有全部匹配,返回false
return c.isEmpty()?true:false;
}
}