力扣二十:有效的括号

力扣二十:有效的括号

题目描述:

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:

输入:s = “()”
输出:true
示例 2:

输入:s = “()[]{}”
输出:true
示例 3:

输入:s = “(]”
输出:false
示例 4:

输入:s = “([)]”
输出:false
示例 5:

输入:s = “{[]}”
输出:true

提示:

1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成

思路:

知道的golang语言知识

1、知道了golang里面没有数组里面++,–的情况,得写出来,比如是s[i++]不可以,i++可以

2、’a’在golang里面代表的是int类型,就是字母转ascii码之后的数字,string类型的s,s[0]就是int类型的数字,是rune类型。

讲一下思路把,简单的数组栈,碰到左边的括号就++,碰到右边的括号就判断–后的数组里面的字母是不是他的左括号,代码里面有三种特殊情况要考虑一些

代码:

func isValid(s string) bool {
    var str [5000]string
    var k int
    s_len:=len(s)
    //情况1:如果括号个数不等于2的倍数或者为0 就说明是false
    if s_len%2!=0||s_len==0{
        return false
    }
    for i:=0;i<s_len;i++{
        if s[i]=='('||s[i]=='['||s[i]=='{'{
            str[k]=string(s[i])
            k++
        }else{
            //情况2:如果第一个就是‘)’,‘]’,‘}’就说明的false
            if k==0{
                return false
            }
            switch s[i]{
                case ')':
                    k--
                    if str[k]!="("{
                        return false
                    }
                    break
                case ']':
                    k--
                    if str[k]!="["{
                        return false
                    }
                    break
                case '}':
                    k--
                    if str[k]!="{"{
                        return false
                    }
                    break
            }
        }
    }
    //情况3:如果没有做到一一对应k会大于0 就false
    if k>0{
        return false
    } 
    return true
}

代码效率:

执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.1 MB, 在所有 Go 提交中击败了23.58%的用户