标签 |
---|
栈 |
字符串 |
1.题目
2.分析
利用栈,遍历字符串的每个字符
如果是左括号,直接入栈;
如果是右括号,看栈顶是否为对应的左括号,不是则不匹配,返回false;是,栈顶出栈;
遍历完之后,如果栈不为空,说明有左括号没与之匹配的右括号,不符合条件,返回false。
3.代码
class Solution {
public boolean isValid(String s) {
//空串定为有效
if(s==null)
return true;
Stack<Character> stack=new Stack<>();
for(int i=0;i<s.length();i++){
Character c=s.charAt(i);
if(c=='('||c=='{'||c=='['){
stack.push(c);
}
else if(c==')'){
if(stack.empty()){
return false;
}
if(stack.peek()!='('){
return false;
}
else{
stack.pop();
}
}
else if(c=='}'){
if(stack.empty()){
return false;
}
if(stack.peek()!='{'){
return false;
}
else{
stack.pop();
}
}
else if(c==']'){
if(stack.empty()){
return false;
}
if(stack.peek()!='['){
return false;
}
else{
stack.pop();
}
}
}
if(!stack.empty()){
return false;
}
return true;
}
}
4.复杂度
时间复杂度O(N)
空间复杂度O(N)