力扣题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
LeetCode题目源地址:https://leetcode-cn.com/problems/valid-parentheses/
存储左括号和右括号的映射,用栈统计左括号,出现左括号就入栈,出现右括号就和栈顶在 map中映射的右括号比较,如果匹配就出栈,不匹配返回 false,最后遍历完的栈为空,则返回 true,否则返回 false。
func isValid(s string) bool {
m := map[byte]byte{'{':'}','[':']','(':')'}
var stack []byte
for i := 0; i < len(s); i++ {
if _, ok := m[s[i]]; ok {
stack = append(stack,s[i])
}else{
if len(stack)>0 && m[stack[len(stack)-1]] ==s[i]{
stack = stack[:len(stack)-1]
}else{
return false
}
}
}
return len(stack) == 0
}
对于给定的字符串 s ,如果有成对出现的括号,则把它们消去(替换为空),再依次判断是否还有成对的括号,有则消去,直到没有成对的括号出现为止,最后判断字符串 s 是否为空,为空则所有括号都正确成对,已被消去,返回 true,不为空则说明存在非法括号,返回 false。
import (
"fmt"
"strings"
)
func main() {
re := isValid("([]])")
fmt.Println(re)
}
func isValid(s string) bool {
for {
find1 := strings.Contains(s, "()")
find2 := strings.Contains(s, "[]")
find3 := strings.Contains(s, "{}")
if find1 || find2 || find3 {
s = strings.Replace(s,"()","",-1)
s = strings.Replace(s,"[]","",-1)
s = strings.Replace(s,"{}","",-1)
}else{
break
}
}
return len(s)==0
}