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
}
}
有疑问加站长微信联系(非本文作者)