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.
思路:
1.像这样成对出现的一般使用Stack来解决;
2.先判断是否为空,字符串长度是否为0,是否为奇数;
3.针对3种成对出现的情况,需要3次判断,我们只需要将成对出现的字符的其中一个压入栈中即可(一般选择同类的( { [ )
4.遍历字符串转化后的数组,若当前字符为),需要判断栈是否为空,而且弹出的元素是否与其匹配;以此标准判断3次;
5 只要最后栈为空,就返回真
public boolean isValid(String s) {
if(s==null||s.length()==0||s.length()%2!=0) return false;
Stack<Character> stack=new Stack<>();
int len=s.length();
for(int i=0;i<len;i++){
char c=s.charAt(i);
if(c==')'){
if(stack.isEmpty()||stack.pop()!='(') return false;
}
else if(c=='}'){
if(stack.isEmpty()||stack.pop()!='{') return false;
}
else if(c==']'){
if(stack.isEmpty()||stack.pop()!='[') return false;
}
else {
stack.push(c);
}
}
return stack.isEmpty();
}