题解 | #字符串解码#

字符串解码

https://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92

package main
import "strings"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @return string字符串
*/
// 当前位置
var currPos int

// 原数据
var srcStr string

// dfs
func decodeString(s string) string {
	srcStr = s
	currPos = 0
	return decodeDFS()
}

func decodeDFS() string {
	if currPos == len(srcStr) || srcStr[currPos] == ']' {
		return ""
	}
	res := ""
	currVal := srcStr[currPos]
	//遇见数字
	if currVal >= '0' && currVal <= '9' {
		repeatNum := getDigital()
		//数字后面一定有],+1跳过[
		currPos++
		tmpRes := decodeDFS()
		//获取[]中的数据结束后,外层一定有],此处+1,跳过]
		currPos++
		res = strings.Repeat(tmpRes, repeatNum)
	} else {
		//遇见字母
		res = string(currVal)
		currPos++
	}
	return res + decodeDFS()
}

// 转数字
func getDigital() int {
	res := 0
	for ; srcStr[currPos] > '0' && srcStr[currPos] <= '9'; currPos++ {
		res = res*10 + int(srcStr[currPos]-'0')
	}
	return res
}

全部评论

相关推荐

04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
被加薪的哈里很优秀:应该继续招人,不会给你留岗位的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务