2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k
2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。
 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。力扣394。
答案2021-12-13:
递归。递归还是有两个返回值。一个是返回结果,一个是返回序号。
代码用golang编写。代码如下:
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)
}
执行结果如下:
 
2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k的更多相关文章
- Struts标签<s:if>判断字符串是否包含一个固定的值
		Struts标签<s:if>判断字符串是否包含一个固定的值:1.如果比较对象是字符串: <s:if test="str.contains('判断是否包含的字符串')&quo ... 
- HashTable集合和练习题_计算一个字符串中每一个字符出现的次数
		HashTable集合 /** * java.util.Hashtable<K,V>集合 implement Map<K,V>接口 * Hashtable:底层也是一个哈希表, ... 
- 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
		分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ... 
- 给定一个字符串,仅由a,b,c 3种小写字母组成。
		package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ... 
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
		题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ... 
- 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length
		// 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba ... 
- 查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。)
		给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表. 例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 ... 
- 核心API的使用(给定一个字符串,统计每个字符出现的次数)
		/** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ... 
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
		给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ... 
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
		开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ... 
随机推荐
- linux查看已知进程PID所在的目录
			pwdx 命令 pwdx PID [was@CMTRMWAS1 ~]$ pwdx 31996 31996: /was/AppServer/profiles/AppSrv03 
- k8s HPA(HorizontalPodAutoscaler)--自动水平伸缩
			写在前面 我们平时部署web服务,当服务压力大撑不住的时候,我们会加机器(加钱):一般没有上容器编排是手动加的,临时加的机器,临时部署的服务还要改Nginx的配置,最后回收机器的时候,也是手动回收,手 ... 
- 全网最详细中英文ChatGPT接口文档(三)30分钟快速入门ChatGPT——资源库
			目录 Python library(Python库) Node.js library(Node.js库) Community libraries 社区图书馆 C# / .NET Crystal Go ... 
- java多线性--线程创建
			java多线性--线程创建 什么是多线程:不同的功能同时进行 Process(进程)与Thread(线程) 进程是执行程序的一次执行过程,是一个动态的概念.是系统分配资源的单位. 一个进程分为多个线程 ... 
- Windows7卡在正在关机
			据我的分析,Windows系统卡在正在关机的原因很大可能性是破解过系统主题.解决方法就是还原成主题未被破解时候的状态.但是这种情况是随机性的,但是可以确定的是,只要是破解过系统主题,都有一定概率关不了 ... 
- 亚马逊商品页面爬取(使用headers字段).py(亲测有效)
			import requests def getHTMLText(url): try: kv = {'user-agent':'Mozilla/5.0'} # 请求头;指定访问浏览器为Mozilla5. ... 
- VS2013连接SQLSERVER数据库时显示无法添加数据连接
			VS2013连接sqlserver2008时出现如下错误: VS2013添加Microsoft SQL Server数据源时,会遇到无法添加数据连接. Could not load file or a ... 
- STM32 HAL库学习(F407ZGT6) (1)-晶振/时钟树
			时钟树(以F407为例) 对于 STM32F4 系列的芯片,正常工作的主频可以达到 168Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十Khz的时钟即可.同一个 ... 
- python入门教程之六运算符
			什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算 ... 
- [Java SE]Java8新特性——默认方法
			1 简述 默认方法就是接口可以有实现方法,而且可以不需要实现类去实现其方法 默认方法(default void hello()) := 一个在接口里面有了一个(默认)实现的方法 1. 子类优先继承父类 ... 
