问题描述:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
原问题链接:https://leetcode.com/problems/valid-parentheses/
问题分析
这个问题相对来说比较简单,我们要判断给定的字符串是否符合合法的符号对。可以用一个栈来辅助处理。当我们遍历数组的时候,碰到左边括号的时候就压栈。如果碰到右边括号的时候就先看是否和栈顶的元素形成一个合法的括号。如果是,则弹出栈顶的元素,否则就返回非法的结果。在最终这个流程处理结束之后再看栈是否为空,如果栈为空表示达到一个合法的结果,否则就是非法的。
针对具体的实现细节,里面也有一些小的可以优化的地方。比如说当我们判断当前输入的字符不是左括号的时候,作为合法的输入,栈应该是非空的。我们可以在这里判断一下,如果栈是空的就可以直接返回了。这样可以跳过一些情况。详细的实现如下:
public class Solution { public boolean isValid(String s) { if(s == null || s.length() < 1) return true; Stack<Character> stack = new Stack<>(); for(int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c == '(' || c == '[' || c == '{') stack.push(c); else { if(stack.isEmpty()) return false; if(c == ')') { if(stack.peek() == '(') stack.pop(); else return false; } else if(c == ']') { if(stack.peek() == '[') stack.pop(); else return false; } else if(c == '}') { if(stack.peek() == '{') stack.pop(); else return false; } else return false; } } return stack.isEmpty(); } }
相关推荐
java lru leetcode :ice_cream: LeetCode ...Parentheses 26 Remove Duplicates from Sorted Array 48 Rotate Image 53 Maximum Subarray 55 Jump Game 56 Merge Intervals 64 Minimum Path Sum 73
java java_leetcode题解之Longest Valid Parentheses.java
c c语言_leetcode 0020_valid_parentheses.zip
3. **栈**:如“有效的括号”(Valid Parentheses),可以使用栈来检查括号的配对性。 4. **二叉树**:如“二叉树的镜像”(Mirror Reflection Tree),涉及到二叉树的遍历和操作。 5. **动态规划**:如“背包问题...
Parentheses 用栈判断括号匹配 Regular Expression Matching 递归匹配 wildcard matching 动态规划 longest common prefix , 简单 valid number, hard, 用有限自动机 integer to roman ,easy , 模拟 roman to ...
Parentheses 有效的括号 Stack / 栈 用栈实现配对 Daily Challenge 2020/08/14 28 Implement strStr() 实现 strStr() String / 字符串 循环遍历即可 algorithm-pattern: quick start 43 Multiply S
Valid Parentheses 21. Merge Two Sorted Lists 22. Generate Parentheses 25. Reverse Nodes in k-Group 26. Remove Duplicates from Sorted Array 27. Remove Element 28. Implement strStr() 3
例如,"Valid Parentheses" (题号 20) 检查括号字符串是否有效。 5. **树**:涉及二叉树、平衡二叉树、二叉搜索树等。例如,"Binary Tree Inorder Traversal" (题号 94) 需要按照中序遍历顺序打印二叉树的节点。 6...
java java_leetcode题解之Maximum Nesting Depth of Two Valid Parentheses
例如,Valid Parentheses(有效括号)和BFS(广度优先搜索)等题目都会用到栈和队列。 4. 树与图:二叉树、平衡二叉树、堆、图等复杂数据结构也是LeetCode的重点。例如,Binary Tree Preorder Traversal(二叉树...
例如“括号匹配”(Valid Parentheses)题目,通过栈可以轻松验证括号是否正确配对。 4. **哈希表**:提供快速的查找、添加和删除操作。在LeetCode中,哈希表常用于解决关联问题,如“寻找两个有序数组的中位数”...
LeetCode字符串换行 Solve_Leetcode 复习的过程,来刷刷题,坚持坚持坚持! 逆波兰表达式 题目如下: 使用了 class Stack A more complete and consistent ...Valid Parentheses 题目如下: Stack泛型
leetcode题库 LeetCode 题解合集 本仓库展示了LeetCode题库中部分题目的解法(持续更新),所有代码均采用C++编写并配有输入输出样例 代码清单如下: 序号 题目 程序源码 ...Parentheses.cpp 22 括号生成 G
例如,"有效的括号"(Valid Parentheses)可以使用栈来检查括号配对的正确性。 4. **二叉树**:二叉树问题包括遍历、查找、构建等。"二叉树的最近公共祖先"(Lowest Common Ancestor of a Binary Tree)可以用递归...
3. **栈和队列**:栈(Last In First Out, LIFO)和队列(First In First Out, FIFO)是两种基础数据结构,常见题目如"有效的括号"(Valid Parentheses)用栈来检查括号匹配,"最短回文串"(Shortest Palindrome)则...
leetcode双人赛LeetCode 编号 题目 难度 题型 备注 Two Sum 简单 Add Two Numbers 中等 链结串列 重要 Longest Substring Without Repeating Characters 中等 字串 重要 Median of Two Sorted Arrays 困难 数学 ...
5. 有效的括号(Valid Parentheses):通过栈的数据结构,可以判断括号字符串是否合法。 四、优化和调试技巧 1. 代码优化:关注时间复杂度和空间复杂度,尽可能写出高效且节省空间的解决方案。 2. 测试用例:充分...
比如,实现strStr()函数(Implement strStr())和有效的括号(Valid Parentheses)等,需要深入理解字符串操作和正则表达式。 6. **哈希表**:哈希表提供高效的查找和插入操作,常用于解决查找重复项、最近点对等...
leetcode 跳跃 LeetCode 力扣刷题70道! 数组 Array 力扣 485 最大连续1的个数 | Max Consecutive ...Parentheses 力扣 496 下一个更大的元素 | Next Greater Element I 力扣 232 用栈实现队列 | Implement
例如,"有效的括号"(Valid Parentheses)要求检查一个字符串是否是有效的小括号序列。 4. **二叉树**:二叉树题目涉及到遍历、搜索、构造、平衡等问题。例如,"二叉树的最大路径和"(Maximum Path Sum)要求找到从...