题目 678. 有效的括号字符串

给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:

任何左括号 ( 必须有相应的右括号 )。

任何右括号 ) 必须有相应的左括号 ( 。

左括号 ( 必须在对应的右括号之前 )。

* 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。

一个空字符串也被视为有效字符串。

示例 1:

输入: "()"

输出: True

示例 2:

输入: "(*)"

输出: True

示例 3:

输入: "(*))"

输出: True

注意:

字符串大小将在 [1,100] 范围内。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/valid-parenthesis-string

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

  • 两个栈,left栈装(,star栈装*。
  • 当遇到),优先pop left栈,若为空则pop*栈,若都为空则返回false。
  • 接下来要处理若两栈内有剩余的情况,两栈同时弹出配对,若left栈弹出元素索引>star栈弹出元素索引,则直接返回false。
  • 最后检查left栈为空则ok,栈可以有任意剩余,因为偶数个可配对,1个*可以作为空串。

代码

  1. import java.util.Stack;
  2. class Solution {
  3. public boolean checkValidString(String s) {
  4. Stack<Integer> left = new Stack<>();
  5. Stack<Integer> star = new Stack<>();
  6. for(int i=0;i<s.length();++i){
  7. char c = s.charAt(i);
  8. if(c=='('){
  9. left.push(i);
  10. }else if(c=='*'){
  11. star.push(i);
  12. }else if(!left.empty()){
  13. left.pop();
  14. }else if(!star.empty()){
  15. star.pop();
  16. }else{
  17. return false;//
  18. }
  19. }
  20. while(!left.empty()&&!star.empty()){
  21. if(left.pop()>star.pop()){
  22. return false;
  23. }
  24. }
  25. System.out.print(star.size());
  26. return left.empty();
  27. }
  28. }

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/valid-parentheses

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

  • 使用map存括号的对应关系。
  • 使用特殊字符入栈底,并设置对应关系,省去栈为空的特殊判断。
  • 使用栈解决。

代码

  1. class Solution {
  2. public static boolean isValid(String s) {
  3. if(s==null){
  4. return true;
  5. }
  6. Map<Character,Character> map = new HashMap<>();
  7. map.put('(',')');
  8. map.put('[',']');
  9. map.put('{','}');
  10. map.put('@','@');
  11. LinkedList<Character> stack = new LinkedList<>();
  12. stack.addLast('@');
  13. for(Character c : s.toCharArray()){
  14. if(map.containsKey(c)){
  15. stack.addLast(c);
  16. }else
  17. if(c!=map.get(stack.removeLast())){
  18. return false;
  19. }
  20. }
  21. }
  22. return stack.size()==1;
  23. }
  24. }

[LeetCode]678. 有效的括号字符串、20. 有效的括号(栈)的更多相关文章

  1. [LeetCode] 678. Valid Parenthesis String 验证括号字符串

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  2. [leetcode]678. Valid Parenthesis String验证有效括号字符串

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  3. Java实现 LeetCode 678 有效的括号字符串(暴力+思路转换)

    678. 有效的括号字符串 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ...

  4. Leetcode 678.有效的括号字符串

    有效的括号字符串 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须 ...

  5. LeetCode:有效的括号【20】

    LeetCode:有效的括号[20] 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. ...

  6. LeetCode 20. 有效的括号(Valid Parentheses)

    20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...

  7. Java实现 LeetCode 20 有效的括号

    20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...

  8. [LeetCode] Valid Parenthesis String 验证括号字符串

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  9. [LeetCode] 20. 有效的括号

    题目链接:https://leetcode-cn.com/problems/valid-parentheses/ 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串, ...

随机推荐

  1. Java实现token的生成与验证-登录功能

    一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而 ...

  2. JavaScript基础-06-正则表达式

    正则表达式 1. 正则表达式用于定义一些字符串的规则:计算机可以根据正则表达式,来检查一个字符串是否符合规则,将字符串中符合规则的内容提取出来. 2. 创建正则表达式对象: var reg=new R ...

  3. github Repository not found 解决办法

    git pull的时候遇到下面的报错. remote: Repository not found fatal: repository 'https://github.com/MyRepo/projec ...

  4. Jmeter系列(55)- 详解 Throughput Controller 吞吐量控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 自行调整该控制器下的子项的执 ...

  5. magento2 pub/static没有adminhtml,frontend的解决方案

    (1) 运行php bin/magento setup:static-content:deploy (2) 检查pub/static有没有.htaccess文件 (3) php bin/magento ...

  6. Invalid credentials for 'https://repo.magento.com/packages.json'

    Use your public key as username and private key as password from your magento connect account You ca ...

  7. springboot整合druid监控配置

    方式一:直接引入druid 1.maven坐标 <dependency> <groupId>com.alibaba</groupId> <artifactId ...

  8. 第二篇Scrum冲刺博客--Interesting-Corps

    第二篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 主页页面和探测空间设计及布局实现 主页页面跳转社区功能及社区设计及布局实现 叶学涛 设计页面 ...

  9. Deep Models Under the GAN: Information Leakage from Collaborative Deep Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1702.07464v3 [cs.CR] 14 Sep 2017 以下是对本文关键部分的摘抄翻译,详情请参见原文. ABSTR ...

  10. Python | 多线程死锁问题的巧妙解决方法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第25篇文章,我们一起来聊聊多线程开发当中死锁的问题. 死锁 死锁的原理非常简单,用一句话就可以描述完.就是当多线程 ...