字符串中只有字符’(‘和’)’。合法字符串需要括号可以配对。比如:
输入:"()"
输出:true
解释:(),()(),(())是合法的。)(,()(,(()是非法的。
package main
import "fmt"
func main() {
b := stack2("()()())")
fmt.Println(b)
}
func stack2(s string) bool {
if len(s) == 0 {
// 空字符串不合法
return false
} else if len(s)%2 == 1 {
// 奇数个不合法
return false
}
leftStr := 0
for i := 0; i < len(s); i++ {
if s[i] == '(' {
leftStr++
} else if s[i] == ')' {
// 如果 leftStr = 0 ,说明是)在前面,肯定是不合法
if leftStr <= 0 {
return false
}
leftStr--
}
}
if leftStr != 0 {
return false
}
return true
}
package main
import "fmt"
func main() {
b := Stack1()
fmt.Println(b)
}
type StackTmp struct {
stack []string
}
func (s *StackTmp) Add(str string) {
tmp := append(s.stack, str)
s.stack = tmp
}
func (s *StackTmp) PopMatch() []string {
tmp := s.stack
respStr := tmp[len(tmp)-1:]
tmp = tmp[:len(tmp)-1]
s.stack = tmp
return respStr
}
// 不同内容
func Stack1() bool {
s := &StackTmp{}
str := "()[]{[]"
if len(str) == 0 {
fmt.Println("字符串为空,合法")
return true
} else if len(str)%2 == 1 {
fmt.Println("不合法")
return false
}
for i := 0; i < len(str); i++ {
if str[i] == '(' || str[i] == '[' || str[i] == '{' {
s.Add(string(str[i]))
fmt.Println("add :", string(str[i]))
} else if str[i] == ')' {
fmt.Println("pop before:", s.stack)
temp := s.PopMatch()
fmt.Println("pop after:", s.stack)
if temp[0] != "(" {
return false
}
} else if str[i] == '}' {
fmt.Println("pop before:", s.stack)
temp := s.PopMatch()
fmt.Println("pop after:", s.stack)
fmt.Println("pop:", temp)
if temp[0] != "{" {
return false
}
} else if str[i] == ']' {
fmt.Println("pop before:", s.stack)
temp := s.PopMatch()
fmt.Println("pop after:", s.stack)
if temp[0] != "[" {
return false
}
}
}
if len(s.stack) != 0 {
return false
}
fmt.Println(s.stack)
return true
}