力扣 有效的括号
括号匹配题目,找到符合的举行抵消。题目
https://i-blog.csdnimg.cn/direct/43152254a6cb48ae8d4a002e3815bf04.jpeg
从题可以看出是嵌套的括号先匹配先做抵消,类似就近原则,这也是栈的典型例题。可以通过摆列多种差别的情况渐渐用if与else做返回。
时间复杂度:O(n),其中 n 是字符串的长度。空间复杂度:O(n),重要来自栈的空间。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] charArray = s.toCharArray();
for (char ch : charArray) {
//如果是左括号则直接入栈
if (ch == '(' || ch == '{' || ch == '[') {
stack.push(ch);
} else {
//如果是右括号,并且此时栈不为空
if (!stack.isEmpty()) {
if (ch == ')') {
if (stack.pop() != '(')
return false;
} else if (ch == '}') {
if (stack.pop() != '{')
return false;
} else {
if (stack.pop() != '[')
return false;
}
}
else{
return false;
}
}
}
return stack.isEmpty();
}
} 通过遍历字符串的字符,把左括号入栈,反面加进的在栈顶,再对右括号出栈看是否可以或许匹配,不匹配就阐明无效,最后还要对栈判空,有可能最后栈还有括号阐明有多的没有匹配到也是不符合的。固然,也可以写简洁一些。
class Solution {
public boolean isValid(String s) {
if(s.isEmpty())
return true;
Stack<Character> stack=new Stack<Character>();
for(char c:s.toCharArray()){
if(c=='(')
stack.push(')');
else if(c=='{')
stack.push('}');
else if(c=='[')
stack.push(']');
else if(stack.isEmpty()||c!=stack.pop())
return false;
}
return stack.isEmpty();
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]