一、问题描述
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.
二、解题思路
使用LinkedList模拟栈空间,FILO,挨个的读取字符串s的字符,如果该字符是左半字符如:'('.'{'.'[',则添加到队列;如果该字符是右半字符如:‘)’.'}',']',则弹出顶层的字符判断是不是相对应的左半字符,如果不是则返回false。
注意:1.需要弹出字符的时候应该先判断栈是不是空栈,如果是则返回false;例如判断的字符串为:“)}]”这种情况
2、循环完成后应该判断栈是否为空栈,为空则返回true;否则返回false。如:“)](){}[]”这种情况
三、代码
public class Solution {
public boolean isValid(String s) {
if(s==null || s.length()<=1)
return false;
LinkedList<Character> list=new LinkedList<Character>();
char temp;
for(int i=0;i<s.length();i++){
switch(s.charAt(i)){
case '(':
list.add('(');
break;
case '{':
list.add('{');
break;
case '[':
list.add('[');
break;
case ')':
if(list.size()==0)
return false;
temp=list.removeLast();
if(temp!='(')
return false;
break;
case '}':
if(list.size()==0)
return false;
temp=list.removeLast();
if(temp!='{')
return false;
break;
case ']':
if(list.size()==0)
return false;
temp=list.removeLast();
if(temp!='[')
return false;
break;
default:
return false;
}
}
if(list.size()==0)
return true;
else
return false;
}
}