力扣二十:有效的括号
力扣二十:有效的括号
题目描述:
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 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%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!