Files
leetcode/top-100-liked/70/leetcode_test.go
T
2026-07-17 14:39:23 +08:00

44 lines
1004 B
Go

package top100liked
import (
"fmt"
"strings"
"testing"
"unicode"
)
// https://leetcode.cn/problems/decode-string/description/?envType=study-plan-v2&envId=top-100-liked
func decodeString(s string) string {
curStr := ""
curNum := 0
strStack := []string{}
numStack := []int{}
for _, r := range s {
if unicode.IsDigit(r) {
curNum = curNum*10 + int(r-'0')
} else if unicode.IsLetter(r) {
curStr += string(r)
} else if r == '[' {
strStack = append(strStack, curStr)
curStr = ""
numStack = append(numStack, curNum)
curNum = 0
} else if r == ']' {
num := numStack[len(numStack)-1]
prevStr := strStack[len(strStack)-1]
numStack = numStack[:len(numStack)-1]
strStack = strStack[:len(strStack)-1]
curStr = prevStr + strings.Repeat(curStr, num)
}
}
return curStr
}
func Test(t *testing.T) {
fmt.Println(decodeString("3[a]2[bc]"))
fmt.Println(decodeString("3[a2[c]]"))
fmt.Println(decodeString("2[abc]3[cd]ef"))
fmt.Println(decodeString("abc3[cd]xyz"))
}