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")) }