美文网首页
括号序列

括号序列

作者: 小北觅 | 来源:发表于2020-11-15 12:11 被阅读0次

题目描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

思路:

判断括号序列是否合法的问题,一般都是用栈这种数据结构去做。
本题中,我们可以定义一个Stack,遍历字符串,当遇到左括号:'(', '[',,'{'或者栈为空时,就将当前位置的字符入栈。如果遇到右括号时,就比对当前字符和栈顶字符是不是对应的括号。如果不对应,那么直接返回false,说明这个字符串不是合法的括号序列,如果是对应的括号,那么就把栈顶的字符出栈,进行下一次循环。 最终,如果栈是空,就返回true,栈不为空,就返回false。代码如下:

import java.util.*;
public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        char[] arr = s.toCharArray();
        int length = arr.length;
        Stack<Character> stack = new Stack();

        for(int i=0; i < length; i++ ) {
            if(stack.isEmpty() || arr[i]=='(' || arr[i]=='[' || arr[i]=='{') {
                stack.push(arr[i]);
                continue;
            }
            if(arr[i]=='}' && stack.peek()!= '{')
                return false;
            else if( arr[i]==')' && stack.peek()!= '(')
                return false;
            else if(arr[i]==']' && stack.peek()!= '[')
                return false;
            else if(stack.isEmpty())
                return false;
            stack.pop();
        }
        if(stack.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

解题中遇到的问题:

在遇到右括号时,与栈顶元素对比的方法我用的stack.pop。这会导致改变栈的结构。比如,如果当前if条件不满足,进入到下一个if,但是此时已经把栈顶元素出栈了。经过debug,把pop改为peek方法,在所有if else比较完之后再出栈。

相关文章

  • [POJ2955]Brackets

    题面描述 我们给出了正则括号序列的如下归纳定义:· 空序列是正则括号序列· 如果s是正则方括号序列,那么(s)和[...

  • 括号序列

    题目描述给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括...

  • [26无验证]牛牛的括号匹配-京东2018秋

    1.题目描述 如果一个括号序列中的每个左括号都有一个右括号与之完成配对,这个序列就是一个合法的括号匹配序列。例如"...

  • 京东2018秋招笔试编程题集合

    1.括号匹配方案 合法的括号匹配序列被定义为: 空串""是合法的括号序列 如果"X"和"Y"是合法的序列,那么"X...

  • 数据结构-栈\队列:1036: 括号匹配(括号位序)

    题目:1036: 括号匹配描述:PIPI给你一个合法的括号序列,希望跟你按左括号下标递增顺序给出每对括号在序列中的...

  • Codeforces 1214C - #583(分析思路,贪心)

    题目描述 给定一个括号序列(可能非法),求能否通过移动最多一个字符,使得括号序列合法。 如果s为合法的括号序列,那...

  • Markdown语法

    标题:几级标题就有几个#列表:有序列表(1.) 无序列表(- + *)链接:中括号 小括号图片:感叹号 中括号 小...

  • 完成括号匹配-(百度2018)

    题目:给出一个括号序列S,在S的开始和结尾处添加一定数量的左括号'['或右括号']',使其成为完整的括号匹配序列;...

  • [25]完成括号匹配-百度2018秋

    1.题目描述 合法的括号匹配序列被定义为: 空串""是合法的括号序列 如果"X"和"Y"是合法的序列,那么"XY"...

  • 括号匹配方案

    合法的括号匹配序列被定义为: 空串""是合法的括号序列; 如果"X"和"Y"是合法的序列,那么"XY"也是一个合法...

网友评论

      本文标题:括号序列

      本文链接:https://www.haomeiwen.com/subject/zxdnbktx.html