12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package main
- import "fmt"
- func main() {
- fmt.Println(isValid2("(())}[]"))
- fmt.Println(isValid("()[]"))
- }
- func isValid(s string) bool {
- // (:40 [:91 {:123 ):41 ]:93 }:125
- length := len(s)
- if length == 0 {
- return true
- }
- // if length%2 == 1 {
- // return false
- // }
- stock := []int{}
- for i := 0; i < length; i++ {
- tmp := s[i]
- if tmp == 40 || tmp == 123 || tmp == 91 {
- stock = append(stock, int(tmp))
- } else if tmp == 41 {
- if len(stock) == 0 {
- return false
- }
- if stock[len(stock)-1] == 40 {
- stock = stock[:len(stock)-1]
- } else {
- stock = append(stock, int(tmp))
- }
- } else if tmp == 93 {
- if len(stock) == 0 {
- return false
- }
- if stock[len(stock)-1] == 91 {
- stock = stock[:len(stock)-1]
- } else {
- stock = append(stock, int(tmp))
- }
- } else if tmp == 125 {
- if len(stock) == 0 {
- return false
- }
- if stock[len(stock)-1] == 123 {
- stock = stock[:len(stock)-1]
- } else {
- stock = append(stock, int(tmp))
- }
- }
- }
- return len(stock) == 0
- }
- func isValid2(s string) bool {
- // (:40 [:91 {:123 ):41 ]:93 }:125
- length := len(s)
- if length == 0 {
- return true
- }
- mapdata := make(map[int]int)
- mapdata[40] = 41
- mapdata[91] = 93
- mapdata[123] = 125
- stock := []int{}
- for i := 0; i < length; i++ {
- tmp := s[i]
- if tmp == 40 || tmp == 123 || tmp == 91 {
- stock = append(stock, int(tmp))
- } else {
- if len(stock) == 0 {
- return false
- } else if mapdata[stock[len(stock)-1]] == int(tmp) {
- stock = stock[:len(stock)-1]
- } else {
- stock = append(stock, int(tmp))
- }
- }
- }
- return len(stock) == 0
- }
|