题目描述
-
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
-
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
-
思路:对于括号的匹配问题,数据结构中已经详细介绍,那就是借助栈的思想-后进先出
- 碰到 ‘(’, ‘{’, ‘[’,入栈 碰到相反的括号那么出栈进行比较
-
代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
switch(c){
case '(':
case '{':
case '[':
stack.push(c);
break;
case ')':
if(!stack.isEmpty()){
if('('==stack.peek()){
stack.pop();
break;
}else{
return false;
}
}else{
return false;
}
case ']':
if(!stack.isEmpty()){
if('['==stack.peek()){
stack.pop();
break;
}else{
return false;
}
}else{
return false;
}
case '}':
if(!stack.isEmpty()){
if('{'==stack.peek()){
stack.pop();
break;
}else{
return false;
}
}else{
return false;
}
}
}
return stack.isEmpty();
}
}
- 时间复杂度:O(n)
- 空间复杂度:O(n)