leetcode_20

淳属虚构 · · 636 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang:

思路:其实这题用栈的话很好解决,但Go里好像没有栈,我就用切片去实现了一个类似的栈,思路是,每当遇见{ [ (时,这些符号会进入切片(入栈),每当遇到} ] )时,我们去查看切片尾端的符号是否是相对应的符号,不是则直接return false,是的话,切片会删除尾端的符号(出栈),在全部字符串处理完了以后,我们查看切片的长度,如果不为0,那么说明有符号没有配对成功,为0则说明成功了

注意:这里需要小心切片的长度问题,例:当我们去处理"}()[]"这个字符串时,遇见的第一个就是}符号,这时候查看切片尾端res[len(res)-1]=='{'可能会导致越界错误,因为此时res的长度为0。在这里我的处理方法是在每次判断时首先判断len(res)!=0,如果为0,则直接可以return false

Tips:这里我采用了Leetcode评论区里的一个方法,先判断字符串长度是否为偶数,不是则直接返回false,个人觉得这是程序员编程时敏锐度的一个体现,也希望以后我可以做到这样

func isValid(s string) bool {
    if len(s)%2!=0{
        return false
    }
    var res []byte
    for i:=0;i<len(s);i++{
        switch s[i] {
        case '}':
            if len(res)!=0&&res[len(res)-1]=='{' {
                res=res[:len(res)-1]
            }else {
                return false
            }
        case ']':
            if len(res)!=0&&res[len(res)-1]=='[' {
                res=res[:len(res)-1]
            }else {
                return false
            }
        case ')':
            if len(res)!=0&&res[len(res)-1]=='(' {
                res=res[:len(res)-1]
            }else {
                return false
            }
        default:
            res = append(res, s[i])
        }
    }
    if len(res)!=0{
        return false
    }else{
        return true
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:淳属虚构

查看原文:leetcode_20

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

636 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传