leetcode 20题利用栈的经典解法(Java小白笔记)
题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这个是一个典型的利用哈希表和栈的题目,我们可以通过利用栈的特性来解决,当我们遇到左括号时我们将其存放到栈中,遇到右括号时将对应栈顶左括号出栈,当遍历完后stack仍为空则表示相同类型的括号以对应顺序闭合,即为true。
哈希表内容详见:https://blog.csdn.net/u010297957/article/details/51974340
关于栈的内容详见https://blog.csdn.net/qq_40663810/article/details/79325564
public boolean isValid(String s) {
if(s.length()== 0)
return true;
//建立一个哈希表用来存放不同类型的括号
HashMap map = new HashMap();
map.put(')','(');
map.put('}','{');
map.put(']','[');
//建立一个栈
Stack<Character> stack = new Stack();
//遍历数组
for(char val : s.toCharArray()){
if(val == '(' || val == '{' || val == '['){
stack.push(val);
}
//当遇到右括号时判断栈,若栈为空即可返回false,若栈非空继续判断出栈的内容与哈希表存储内容不对应(不是同一种类型的括号)也返回false
if((val == ')' || val == ']' || val == '}') && (stack.isEmpty() || stack.pop() != map.get(val))){
return false;
}
}
//遍历结束后判断栈的内容是否为空
return stack.isEmpty();
}