LeetCode-有效的括号(java实现)
题目如下:
刚看到这题的时候,还是非常简单的想暴力解决。暴露了眼界还是太狭隘。刚开始的想法是只要判断出"(){}[]"、"({[]})"、"()"...等这样为true的情况应该就能解决问题了。但是想法太简单 ,运行的结果不是忘了判断这种情况就是忘了判断那种情况,最后运算还超时了。
后来在网上找了一下代码,运行时间为14ms。这段代码运用了栈stack,这是以前的知识盲区。整体的思路是这样的:例如我们需要判断如下字符串“{[]}”,把字符串的第一个字符压入栈,然后用字符串的后一个字符与之相比较。如果不相同,则把这个字符也压入栈。第二次for循环,此时stack.peek()取到的是‘[’, s.charAt(i) == ']'。此时根据if中的判断条件,表达式为true,stack把栈顶元素弹出。此时stack中还剩下一个元素‘(’,进入下一次for循环,stack.peek()取值是')',再次进入循环判断。
代码如下:
public boolean isValid(String s) {if(s == "" || s.length() == 0)return true;Stack stack = new Stack();stack.push(s.charAt(0));for(int i=1; i<s.length(); i++){if(!stack.isEmpty()){if(stack.peek().equals((char)(s.charAt(i)-1)) || stack.peek().equals((char)(s.charAt(i)-2))){stack.pop();}else {stack.push(s.charAt(i));}}else {stack.push(s.charAt(i));}}if(stack.isEmpty())return true;return false;
运行成功之后,看到一个实现代码,同样是运用了stack。但是运行时间只有6ms,相差了快3倍。遂好好把玩了一番,不得感叹,喵啊~ 具体思路就不啰嗦了,代码表达的非常清晰
public boolean isValid(String s) {Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++){char ch = s.charAt(i);if(ch == '(' || ch == '[' || ch == '{'){stack.push(ch);}else{if(stack.isEmpty()){return false;}char topChar = stack.pop();if(ch == ')' && topChar != '('){return false;}else if(ch == ']' && topChar != '['){return false;}else if(ch == '}' && topChar != '{'){return false;}}}return stack.isEmpty();}
LeetCode-有效的括号(java实现)相关推荐
- 《LeetCode力扣练习》第20题 有效的括号 Java
<LeetCode力扣练习>第20题 有效的括号 Java 一.资源 题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符 ...
- [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
[问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...
- [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
[问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...
- [Leetcode][第78题][JAVA][子集][位运算][回溯]
[问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...
- [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]
[问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...
- [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]
[问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...
- [Leetcode][第216题][JAVA][数组之和3][回溯]
[问题描述][中等] [解答思路] 回溯 剪树枝 当和超过n 或 个数超过k 1. 正向求和 优化前 class Solution {public List<List<Integer> ...
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- [Leetcode][第77题][JAVA][组合][回溯]
[问题描述][中等] [解答思路] 1. 回溯 class Solution {List<List<Integer>> lists = new ArrayList<> ...
- [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]
[问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...
最新文章
- usaco Stringsobits
- 《Java程序员,上班那点事儿》图书有奖征文图书奖品名单
- Mysql| Mysql函数,聚集函数的介绍与使用(Lower,Date,Mod,AVG,...)
- java 超时集合_确定性监视器脉冲/等待并在 生产环境 者 - 消费者集合中实现超时...
- LeetCode 1056. 易混淆数(哈希)
- Spring Boot2整合Shiro(1):身份认证
- linux技术属于什么系,什么云计算技术?想学好这个必须了解的!
- 【渝粤题库】陕西师范大学800009 环境变迁
- dial tcp 10.96.0.1:443: i/o timeout
- 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
- 【海康威视】2022届超新星-AI算法工程师-萤石-暑假实习面经
- Linux上的oracle11g安装(提供安装包链接)以及其他问题注解
- Python递归绘制谢尔宾斯基三角形
- 网站权重大有用处,枫树seo教你一键进行网站权重查询
- 喉咙肿痛症状似流感 常州一男子延误治疗险送命
- D435i+vins-Fusion+ego-planner+yolo无人机避障实测
- runauto.. 病毒斗争记
- 金蝶软件工具集4.0
- 基于cocos2d-x简易泡泡龙游戏二
- wxpay-is-shit