知识点:栈
给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
输入:s = "()"
输出:true
输入:s = "()[]{}"
输出:true
输入:s = "(]"
输出:false
输入:s = "([)]"
输出:false
输入:s = "{[]}"
输出:true
这道题目其实是典型的一道栈的题目。可以每次只要遇到左括号就将其压栈,遇到右括号就让其与栈顶元素去做对比,如果和栈顶元素配套的话就出栈,然后判断最后栈里是否还有元素;
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 == 1) return false;
Stack<Character> stack = new Stack<>();
for(Character c : s.toCharArray()){
if(c == ‘(‘ || c == ‘{‘ || c == ‘[‘) stack.push(c);
else if(stack.size() == 0) return false;
else if(c == ‘)‘ && stack.peek() != ‘(‘) return false;
else if(c == ‘}‘ && stack.peek() != ‘{‘) return false;
else if(c == ‘]‘ && stack.peek() != ‘[‘) return false;
else stack.pop();
}
return stack.isEmpty();
}
}
熟悉栈的操作,要注意与队列区分,包括创建的时候,栈是直接有栈类Stack,而队列是new的LinkedList;其次还有压栈和入队,出栈和出队;
原文:https://www.cnblogs.com/Curryxin/p/14777666.html