首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-12-13:字符串解码。给定一个经过编码的字符串,返回

2021-12-13:字符串解码。给定一个经过编码的字符串,返回

原创
作者头像
福大大架构师每日一题
发布于 2021-12-13 14:05:03
发布于 2021-12-13 14:05:03
4270
举报

2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: kencoded_string,表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 24 的输入。力扣394。

答案2021-12-13:

递归。递归还是有两个返回值。一个是返回结果,一个是返回序号。

代码用golang编写。代码如下:

代码语言:txt
AI代码解释
复制
package main

import "fmt"

func main() {
    s := "2[moonfdd3[a]]2[]"
    ret := decodeString(s)
    fmt.Println(ret)
}

func decodeString(s string) string {
    str := []byte(s)
    return process(str, 0).ans
}

type Info struct {
    ans  string
    stop int
}

func NewInfo(a string, e int) *Info {
    ret := &Info{}
    ret.ans = a
    ret.stop = e
    return ret
}

// s[i....]  何时停?遇到   ']'  或者遇到 s的终止位置,停止
// 返回Info
// 0) 串
// 1) 算到了哪
func process(s []byte, i int) *Info {
    //StringBuilder ans = new StringBuilder();
    ans := make([]byte, 0)
    count := 0
    for i < len(s) && s[i] != ']' {
        if (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') {
            ////ans.append(s[i++]);
            ans = append(ans, s[i])
            i++
        } else if s[i] >= '0' && s[i] <= '9' {
            count = count*10 + int(s[i]) - int('0')
            i++
        } else { // str[index] = '['
            next := process(s, i+1)
            //ans.append(timesString(count, next.ans));
            ans = append(ans, timesString(count, next.ans)...)
            count = 0
            i = next.stop + 1
        }
    }

    return NewInfo(string(ans), i)
}

func timesString(times int, str string) string {
    ans := make([]byte, 0)
    for i := 0; i < times; i++ {
        ans = append(ans, str...)
    }
    return string(ans)
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode 394:字符串解码 Decode String
给定一个经过编码的字符串,返回它解码后的字符串。 Given an encoded string, return its decoded string.
爱写bug
2019/08/19
1.5K0
2021-12-18:找到字符串中所有字母异位词。 给定两个字符
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
福大大架构师每日一题
2021/12/18
2150
2021-12-22:回文子串。 给你一个字符串 s ,请你统计并返
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"。
福大大架构师每日一题
2021/12/22
2330
LeetCode 394. 字符串解码
https://leetcode-cn.com/problems/decode-string/
freesan44
2021/09/13
6490
LeetCode 394. 字符串解码
【数据结构和算法】字符串解码
这是力扣的 394 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。
绿毛龟
2024/01/19
2360
【数据结构和算法】字符串解码
leetcode394字符串解码(回溯|栈)「建议收藏」
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
全栈程序员站长
2022/09/22
2540
2021-06-06:一个字符串添加最少的字符变成回文串,请返回其中一个结果。
从dp右上角出发,看dp的左边,下边,左下边。如果dp和左边差值是1,朝左走;如果dp和下边差值是1,朝下走;剩余情况,朝左下走。
福大大架构师每日一题
2021/06/06
4970
2021-06-06:一个字符串添加最少的字符变成回文串,请返回其中一个结果。
2021-06-08:一个字符串至少要切几刀能让切出来的子串都是回文串?
方法二、对字符串范围做是否是回文串的dp。dpi=true是i,j范围上是回文串,dpi依赖左下方。消耗O(N**2)的空间。
福大大架构师每日一题
2021/06/08
2370
2021-06-08:一个字符串至少要切几刀能让切出来的子串都是回文串?
2021-05-26:给定一个char[][] matrix,也就是char类型的二维数组,再给定一个字符串word,可以从任何
2021-05-26:给定一个char[][] matrix,也就是char类型的二维数组,再给定一个字符串word,可以从任何一个某个位置出发,可以走上下左右,能不能找到word?char[][] m = {{ 'a', 'b', 'z' }, { 'c', 'd', 'o' }, { 'f', 'e', 'o' }}。设定1:可以走重复路的情况下,返回能不能找到。比如,word = "zoooz",是可以找到的,z -> o -> o -> o -> z,因为允许走一条路径中已经走过的字符。设定2:不可以走重复路的情况下,返回能不能找到。比如,word = "zoooz",是不可以找到的,因为允许走一条路径中已经走过的字符不能重复走。
福大大架构师每日一题
2021/08/05
5960
2021-09-05:单词搜索 II。给定一个 m x n 二维字符网格 bo
2021-09-05:单词搜索 II。给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。力扣212。
福大大架构师每日一题
2021/09/05
2890
2021-10-16:单词拆分 II。给定一个非空字符串 s 和一个包
2021-10-16:单词拆分 II。给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。力扣140。
福大大架构师每日一题
2021/10/16
3220
2021-06-10:一个字符串用最少刀数切出来的子串都是回文串,返回所有划分结果 。
2021-06-10:一个字符串用最少刀数切出来的子串都是回文串,返回所有划分结果 。
福大大架构师每日一题
2021/06/10
3990
2021-06-10:一个字符串用最少刀数切出来的子串都是回文串,返回所有划分结果 。
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
福大大架构师每日一题
2021/12/24
1460
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串? 比如 s1 = “abcde“,s2
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?比如 s1 = "abcde",s2 = "axbc"。
福大大架构师每日一题
2021/08/05
5600
【栈与队列】字符串解码
​ 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
利刃大大
2025/02/22
1760
2021-06-07:一个字符串添加最少的字符变成回文串,回文串有多个,请返回所有结果。
2021-06-07:一个字符串添加最少的字符变成回文串,回文串有多个,请返回所有结果。
福大大架构师每日一题
2021/06/07
5930
2021-06-07:一个字符串添加最少的字符变成回文串,回文串有多个,请返回所有结果。
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。
福大大架构师每日一题
2024/05/27
1740
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“
2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。 定义:如果一个整数
2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。
福大大架构师每日一题
2025/06/06
550
2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。 定义:如果一个整数
2021-12-02:给定一个字符串str,和一个正数k。 返回长度为
2021-12-02:给定一个字符串str,和一个正数k。 返回长度为k的所有子序列中,字典序最大的子序列。 来自腾讯。 答案2021-12-02: 单调栈。先进来的元素大,后进来的元素小。 时间复杂度:O(N)。 额外空间复杂度:O(N)。 代码用golang编写。代码如下: package main import "fmt" func main() { s := "abcba" k := 3 ret := maxString(s, k) fmt.Println(ret
福大大架构师每日一题
2021/12/02
2790
LeetCode 394. 字符串解码(栈)
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
Michael阿明
2020/07/13
4300
LeetCode 394. 字符串解码(栈)
推荐阅读
​LeetCode 394:字符串解码 Decode String
1.5K0
2021-12-18:找到字符串中所有字母异位词。 给定两个字符
2150
2021-12-22:回文子串。 给你一个字符串 s ,请你统计并返
2330
LeetCode 394. 字符串解码
6490
【数据结构和算法】字符串解码
2360
leetcode394字符串解码(回溯|栈)「建议收藏」
2540
2021-06-06:一个字符串添加最少的字符变成回文串,请返回其中一个结果。
4970
2021-06-08:一个字符串至少要切几刀能让切出来的子串都是回文串?
2370
2021-05-26:给定一个char[][] matrix,也就是char类型的二维数组,再给定一个字符串word,可以从任何
5960
2021-09-05:单词搜索 II。给定一个 m x n 二维字符网格 bo
2890
2021-10-16:单词拆分 II。给定一个非空字符串 s 和一个包
3220
2021-06-10:一个字符串用最少刀数切出来的子串都是回文串,返回所有划分结果 。
3990
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我
1460
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串? 比如 s1 = “abcde“,s2
5600
【栈与队列】字符串解码
1760
2021-06-07:一个字符串添加最少的字符变成回文串,回文串有多个,请返回所有结果。
5930
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“
1740
2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。 定义:如果一个整数
550
2021-12-02:给定一个字符串str,和一个正数k。 返回长度为
2790
LeetCode 394. 字符串解码(栈)
4300
相关推荐
​LeetCode 394:字符串解码 Decode String
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档