1题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
2解答
刚开始我是这样写的
func isValid(s string) bool {
var i int =0
maps :=map[byte]byte{')':'(',']':'[','}':'{'}
if len(s)/2 !=0{
return false
}else{
for i<len(s)-1{
if s[i+1]==maps(s[i]){
//那个错误提示,好像是不能直接这样比较
i+=2
}else{
return false
break
}
}
return true
}
}
提示这样的问题,我也不明白什么原因
Line 8: Char 28: cannot call non-function maps (type map[byte]byte) (solution.go)
意思是不能调用非函数映射
下面是查找的正确的解法
func isValid(s string) bool {
length := len(s)
if length % 2 != 0{
return false
}
result := make([]byte, length)
paris := map[byte]byte{
')': '(',
']':'[',
'}': '{',
}
j:=0
for i :=0;i<length;i++{
if s[i] == '(' || s[i] == '{' || s[i] == '['{
//如果是括号的左半部分,就存入result数组
result[j] = s[i]
j++
}else{//如果是括号的右半部分,就进行else这一部分,让result里面的值和map的Paris进行匹配,是否能匹配上,配成不成功,返回FALSE,成功后进行j--,一直保存result中只含有一个字符
if j==0{
return false
}
if paris[s[i]] != result[j-1]{
return false
}
j--
}
}
if j == 0{
return true
}
return false
}
3参考链接
原文链接:https://blog.csdn.net/xiaomayi201314/article/details/118120697
链接:https://leetcode-cn.com/problems/valid-parentheses