44 lines
1004 B
Go
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"))
|
|
}
|