java括号匹配问题介绍

目录
  • 题目描述:
  • 问题分析:
    • 1 可能存在左括号多的情况
    • 2 可能存在右括号多的情况
    • 3 存在括号不匹配的情况
  • 总结解题思路:
  • 代码实现:

题目描述:

给定一个只包括 ‘(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合
题目链接:括号匹配问题

问题分析:

1 可能存在左括号多的情况

2 可能存在右括号多的情况

3 存在括号不匹配的情况

总结解题思路:

1 我们在遍历字符串的过程中,需要先取得栈顶的元素与右括号比较,看是否匹配,如果匹配才能出栈。
2 在出栈的过程中,如果栈为空,说明右括号多了,如果发现栈顶元素与右括号不是匹配的括号,那么就需要直接return了
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.empty()){//栈为空,右括号多了
                    return false;
                }else{
                    char ch1 = stack.peek();//取栈顶元素
                if(ch1=='('&& ch ==')'||ch1=='{'&&ch=='}'||ch1=='['&&ch==']'){
                    stack.pop();//匹配出栈
                }else{
                    return false;//括号不匹配
                }
                }
            }
        }
        if(!stack.empty()){
            return false;//栈不为空,左括号偏多了
        }
        return true;
    }

到此这篇关于java括号匹配问题介绍的文章就介绍到这了,更多相关java括号匹配内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java括号匹配算法求解(用栈实现)

    如何使用栈来判定括号是否匹配 对于给定的表达式,可以使用栈来实现括号匹配判定,这个算法在编译器中非常重要,解析器每次读入 一个字符,如果字符是一个开分隔符,如(,[,{,入栈,若读入的是闭分隔符),],},出栈,如果两者匹配,继续解析字符串,如果不匹配,解析器错误 算法思路 1.创建一个栈 2.当(当前字符不等于输入的结束字符) (1)如果当前字符不是匹配的字符,判断栈内是否为空,如果栈为空,括号必然不完整 (2)如果字符是一个开分隔符,那么将其入栈 (3)如果字符是一个闭分隔符,,且栈不为空,

  • Java 括号匹配问题案例详解

    目录 前言 例题 算法思想 算法举例 代码 栈类 括号匹配核心算法 完整代码 运行结果 前言 括号匹配问题算是栈应用中比较经典的问题了,在数据结构的书中还有各种考试中会出现.最近刷题的时候也遇到了,就想写一篇文章整理一下. 例题 题目来自Leetcode中国 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效. 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合. 2.左括号必须以正确的顺序闭合. 注意空字符串可被认为是有效字符串. 示例 1: 输入: "()"

  • Java栈的应用之括号匹配算法实例分析

    本文实例讲述了Java栈的应用之括号匹配算法.分享给大家供大家参考,具体如下: 1.LeetCode官网 美网:https://leetcode.com/ 中文网 :https://leetcode-cn.com/ 英语不咋地,所以选择此处选择中文网来进行测试. 2.LeetCode中获取第20号题目 (1)搜索20号题目 (2)查看题目 (3)根据题目要求,首先在本地编辑器中完善20号题目的代码--使用java提供的Stack类,代码如下: class Solution { public bo

  • java括号匹配问题介绍

    目录 题目描述: 问题分析: 1 可能存在左括号多的情况 2 可能存在右括号多的情况 3 存在括号不匹配的情况 总结解题思路: 代码实现: 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合 题目链接:括号匹配问题 问题分析: 1 可能存在左括号多的情况 2 可能存在右括号多的情况 3 存在括号不匹配的情况 总结解题思路: 1 我们在遍历字符串的过程中

  • java正则匹配读取txt文件提取特定开头和结尾的字符串

    目录 前言 一.使用FileInputStream处理 二.使用正则开始匹配 1.匹配规则书写 2.pattern 代码案例 总结 前言 前天刚入职的算法同事,过来问我怎么提取txt文件中的数据,我一看这还不简单,结果…搞了好久. 正则不用真的会忘记,写篇博客增加一下记忆吧. 需求:提取txt文件中,有特定开头(双引号) ,特定结尾(双引号) 的中间的数据,打印出来 一.使用FileInputStream处理 FileInputStream:是java中的字节输入流,就是通过字节的形式进行读取

  • JAVA正则表达式匹配多个空格的解决方案

    目录 需求 解决方案 扩充知识 ()和[]有本质的区别 java中,正则表达式匹配一个或多个空格 && 正则表达式匹配两个或多个空格 正则表达式匹配多个空格 需求 针对tab键带来的多个空格问题,有时候我们针对带空格的一行数据要进行切割,如果有多个空格就会出现就会切割空格出现,我们想把空格都去掉,所以需要用到某些方法. 解决方案 利用正则表达式来匹配空格 \\s+ 首先利用split("\\s+");方法来对字符串切割,尽可能的匹配空格,这里也挺有意思,因为空格数目不一

  • Java操作Redis详细介绍

    1. 简介 Redis 是一个开源(BSD许可)的,内存中的key-value存储系统,它可以用作数据库.缓存和消息中间件. 2. 对key的操作 首先要建立连接Jedis jedis = new Jedis("127.0.0.1", 6379),然后就可以对string,set,zset,hash进行操作了. //对key的测试 public void keyTest() { System.out.println(jedis.flushDB()); //清空数据 System.out

  • python实现括号匹配的思路详解

    1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys() def check(s): arr = [] for c in s: if c in SYMBOLS_L: # 左符号入栈 arr.appe

  • Python实现括号匹配方法详解

    这篇文章主要介绍了python实现括号匹配方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.ke

  • C语言实现括号匹配的方法

    1 要求 编写程序检查该字符串的括号是否成对出现,而且不能交叉出现. 输入: 一个字符串,里边可能包含"()"."{}"."[]"三种括号,"#"结束 输出: 成功:代表括号成对出现并且嵌套正确 失败:未正确使用括号字符. 2 分析 用一个栈,就能解决该问题,左括号栈顶字符必须和第一个入栈的右括号字符匹配. 栈介绍:栈是一种特殊的线性表,仅能在线性表的一端操作. 栈的特性:后进先出(LIFO) 由于正在学数据结构,于是栈的定义

  • java暴力匹配及KMP算法解决字符串匹配问题示例详解

    目录 要解决的问题? 一.暴力匹配算法 一个图例介绍KMP算法 二.KMP算法 算法介绍 一个图例介绍KMP算法   代码实现 要解决的问题? 一.暴力匹配算法 一个图例介绍KMP算法 String str1 = "BBC ABCDAB ABCDABCDABDE"; String str2 = "ABCDABD";     1. S[0]为B,P[0]为A,不匹配,执行第②条指令:"如果失配(即S[i]! = P[j]),令i = i - (j - 1),

随机推荐