题目的意思一开始没看明白,以为括号是有优先级的,想的太复杂了,输入的字符串只包含括号。
最内层的括号必须是相邻的,类似{ ( [ ] ) }也是有效的。
用栈来实现。
如果字符串长度为奇数,肯定不是有效的。
遍历字符串,如果遇到前半部分括号,则把后半部分的括号入栈。
下一次遍历时,如果不是前半部分括号,即是后半部分,那么就得要判断与前一个字符是否匹配,
判断栈是否为空,不为空,把该字符与栈顶元素比较,不相同,返回false;相同,将栈顶出栈。
遍历全部结束后,判断栈是否为空,返回判断值。
注意:Java中Stack中只能存放对象,不能存放基本数据类型,char对应的封装类是Character
public boolean isValid(String s) {
int length = s.length();
if(length == 0)return true;
if(length%2 != 0)return false;
Stack<Character> stack = new Stack<Character>();
for(int i=0;i<length;i++){
char c = s.charAt(i);
if(c=='(')stack.push(')');
else if(c=='[')stack.push(']');
else if(c=='{')stack.push('}');
else if(!stack.empty()){
if(c!=stack.peek())return false;
else stack.pop();
}
}
return stack.empty();
}