Leetcode 题目:括号匹配

栏目: 编程工具 · 发布时间: 7年前

内容简介:这道题目是 LeetCode 第 20 题在我用 Go 解答这个问题时,发现了 Go 特别的用法和一些求解中容易忽略的边界条件,觉的还是有必要记录一下。给定一个只包含

前言

这道题目是 LeetCode 第 20 题 Valid Parentheses

在我用 Go 解答这个问题时,发现了 Go 特别的用法和一些求解中容易忽略的边界条件,觉的还是有必要记录一下。

题目简述

给定一个只包含 '('')''{''}''['']' 的字符串,判断字符串是否有效。有效的条件为:括号必须有相同的括号对应, 且括号必须以正确的顺序对应。

示例1:

输入:"()"
输出:true

示例2:

输入:"()[]{}"
输出: true

示例3:

输入:"([)]"
输出:true

解题思路

遍历字符串每个字符,当字符属于 '(''{''[' 时,将字符压入栈。若字符不属于,则将当前字符与栈顶元素比较,如果括号对应说明正确并弹出栈顶元素,否则返回错误。

依照此思路写下第一个版本的答案:

func isValid(s string) bool {
    brackets := map[rune]rune{')': '(', ']': '[', '}': '{'}
    var stack []rune

    for _, char := range s {
        if char == '(' || char == '{' || char == '[' {
            stack = append(stack, char)
        } else if brackets[char] == stack[len(stack) - 1] {
            stack = stack[:len(stack) - 1]
        } else {
            return false
        }
    }

    return false
}

Go 一般是不会出现单引号的,单引号只能包含一个字符,通过 fmt.Println(reflect.TypeOf('(')) 可以发现它是一个 int32 类型,也就等同于 rune 类型,关于 rune 的解释,可以查看这个 博客 。字符串底层是 byte,中文在 utf-8 编码下是 3 byte,而是用 unicode 解码就是 1 个字符。

以上代码并不能通过 leetcode 的测试,因为这里忽略了两个测试情况:

{}}
{{}

然后我们修复这个问题:

func isValid(s string) bool {
    brackets := map[rune]rune{')': '(', ']': '[', '}': '{'}
    var stack []rune

    for _, char := range s {
        fmt.Println(reflect.TypeOf(char))
        if char == '(' || char == '{' || char == '[' {
            // 入栈
            stack = append(stack, char)
            // 循环中,stack不能为空
        } else if len(stack) > 0 && brackets[char] == stack[len(stack) - 1] {
            // 栈中有数据,且此元素与栈尾元素相同
            stack = stack[:len(stack) - 1]
        } else {
            return false
        }
    }

    // 循环结束,栈中还有数据则 false
    return len(stack) == 0
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

动画的时间掌握

动画的时间掌握

哈罗德•威特克、约翰•哈拉斯 / 中国电影出版社 / 2012-7-1 / 38.00元

动画的时间掌握(修订版),ISBN:9787106035334,作者:(英)哈罗德·威特克 等著一起来看看 《动画的时间掌握》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具