java 中的括号匹配问题

原创 2015年11月19日 17:01:50

用于判断一个串中的括号是否匹配所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉
例如:
..(..[..]..).. 是允许的
..(…[…)….]…. 是禁止的

首先 是想到的当然是利用栈来解决问题,因为栈是先进后出的,并且是有顺序的,很好的解决了 括号的交叉问题。效率高,代码简洁。

package day1118;
import java.util.*;
public class Test1 {

    public static boolean isGoodBracket(String s) {
        Stack<Character> a = new Stack<Character>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(')
                a.push(')');
            if (c == '[')
                a.push(']');
            if (c == '{')
                a.push('}');
            if (c == ')' || c == ']' || c == '}') {
                if (a.size()==0)
                    return false; 
                if (a.pop() != c)
                    return false;
            }
        }
        if (a.size()!=0)
            return false; 
        return true;
    }
    public static void main(String[] args) {
        System.out.println(isGoodBracket("...(..[.)..].{.(..).}..."));

    }

}

但是如果 不考虑括号的 交叉问题,可以用其他的方法,例如直接将括号添加到Sting 或者是StringBuffer中,利用indexOf(“}”)–获取第一次出现“}”出现的位置,和lastIndexOf(“{“)–获取最后一次出现“{“的位置,将String进行逐个删除,如果最后String为空的话,那么匹配成功,否则为flase.

—–本人 初学者,有错误请告知,谢谢。——

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构之括号匹配问题

输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。 没达到输出那个括号出错的目的,不过也能判断是否正确了。 #include #include #i...
  • LZK1997
  • LZK1997
  • 2016年09月29日 20:24
  • 522

括号匹配问题,用栈实现

用栈实现括号匹配其实是一个很简单的问题,思路在代码注释里面写的很清楚了,只是接口设置的好像不太好。 如果在main里面设置的str不是动态分布的,在linux下就会出错,不知道windows会不会出问...
  • guang_jing
  • guang_jing
  • 2014年05月06日 14:31
  • 2339

【九度】题目1153:括号匹配问题

题目描述:     在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左...
  • u013027996
  • u013027996
  • 2013年12月11日 13:16
  • 1190

括号匹配Java实现

给定一串只有左右括号的字符串要求判断该字符串是否完全匹配,这是括号匹配中最简单的题目,很多解法是基于堆栈实现的,堆栈实际需要O(n)的空间复杂度,实际上这道题用O(1)的空间负复杂度完全可以实现,基本...
  • columbia7311
  • columbia7311
  • 2017年07月20日 10:27
  • 523

java利用栈实现括号()[]匹配问题

描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入...
  • w305172521
  • w305172521
  • 2015年09月05日 18:13
  • 1852

括号匹配问题(不用栈,用数组)

不用模板栈的话,就是建立一个数组,输入若是左括号,则入栈,stack[++top]=a[i],top为栈顶元素的指针,若是右括号,则出栈,stack[top--]。 此处关键是自增符号的顺序,为什么...
  • Scarlett_geng
  • Scarlett_geng
  • 2016年05月11日 21:07
  • 1018

关于栈的应用-括号匹配问题的两种解题思路

1.解法1的思路是:先把字符串转换为数组,然后遍历数组,一旦遇到 左括号,则将它压入栈中,然后依次先对( [ {进行匹配顺序的判断,最后进行括号数量的判断,具体代码如下: public static...
  • Mypromise_TFS
  • Mypromise_TFS
  • 2016年12月05日 11:21
  • 353

使用纯递归判断括号是否匹配

判断括号大家可能都会,无非就是进栈出栈的问题,但是我们一般都会显式的定义一个栈,一般就是一个数组,现在有一个问题,要求不能使用显示栈,不能用数组,甚至不能用指针,当然也不能用stl,就使用纯递归,而且...
  • wr132
  • wr132
  • 2015年08月10日 12:53
  • 908

字符串匹配问题(栈)

字符串匹配问题 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Sub...
  • u012773338
  • u012773338
  • 2014年11月02日 20:33
  • 677

栈用于解决括号匹配问题

在编写程序的过程中,我们经常需要对一串括号是否匹配进行判断。如何判断呢?我们可以借助栈来进行判断。基本思路是:遍历字符串,当发现有右括号而此时的栈顶元素又恰好是与之匹配的左括号时,则栈顶元素出栈;其余...
  • kelvinmao
  • kelvinmao
  • 2016年04月07日 23:01
  • 1333
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 中的括号匹配问题
举报原因:
原因补充:

(最多只允许输入30个字)