题目如下:

刚看到这题的时候,还是非常简单的想暴力解决。暴露了眼界还是太狭隘。刚开始的想法是只要判断出"(){}[]"、"({[]})"、"()"...等这样为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实现)相关推荐

  1. 《LeetCode力扣练习》第20题 有效的括号 Java

    <LeetCode力扣练习>第20题 有效的括号 Java 一.资源 题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符 ...

  2. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...

  3. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  4. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  5. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

    [问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...

  6. [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

    [问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...

  7. [Leetcode][第216题][JAVA][数组之和3][回溯]

    [问题描述][中等] [解答思路] 回溯 剪树枝 当和超过n 或 个数超过k 1. 正向求和 优化前 class Solution {public List<List<Integer> ...

  8. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  9. [Leetcode][第77题][JAVA][组合][回溯]

    [问题描述][中等] [解答思路] 1. 回溯 class Solution {List<List<Integer>> lists = new ArrayList<> ...

  10. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

    [问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...

最新文章

  1. usaco Stringsobits
  2. 《Java程序员,上班那点事儿》图书有奖征文图书奖品名单
  3. Mysql| Mysql函数,聚集函数的介绍与使用(Lower,Date,Mod,AVG,...)
  4. java 超时集合_确定性监视器脉冲/等待并在 生产环境 者 - 消费者集合中实现超时...
  5. LeetCode 1056. 易混淆数(哈希)
  6. Spring Boot2整合Shiro(1):身份认证
  7. linux技术属于什么系,什么云计算技术?想学好这个必须了解的!
  8. 【渝粤题库】陕西师范大学800009 环境变迁
  9. dial tcp 10.96.0.1:443: i/o timeout
  10. 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
  11. 【海康威视】2022届超新星-AI算法工程师-萤石-暑假实习面经
  12. Linux上的oracle11g安装(提供安装包链接)以及其他问题注解
  13. Python递归绘制谢尔宾斯基三角形
  14. 网站权重大有用处,枫树seo教你一键进行网站权重查询
  15. 喉咙肿痛症状似流感 常州一男子延误治疗险送命
  16. D435i+vins-Fusion+ego-planner+yolo无人机避障实测
  17. runauto.. 病毒斗争记
  18. 金蝶软件工具集4.0
  19. 基于cocos2d-x简易泡泡龙游戏二
  20. wxpay-is-shit

热门文章

  1. JavaScript的厄运
  2. 无法将非静态数据成员声明为 inline
  3. C语言实现MQTT协议(一)协议讲解
  4. 怎么用程序设置NVIDIA双显卡环境变量
  5. python游戏解法_友尽妙招:用Python解“智力游戏”
  6. POI设置 缩小字体填充
  7. JAVA输出语句及变量
  8. 计算机的随想作文500字,随想作文500字
  9. 清理电脑系统垃圾后文件丢失了怎么办,快用云便签存储文件
  10. SpringBoot 整合 RocksDB