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" 输出 ...
随机推荐
- python selenium 操作文件上传,并发操作时,文件选择窗口混乱解决方案
上传文件 使用的是 python + autoit 模块,这种方式有一个问题,当出现多条任务同时选择文件上传的时候,无法判断那个文件选择窗口的归属,从而出现上传了错误的文件! 解决方法: 要上载文件而 ...
- Quine-McCluskey两级逻辑化简算法原理解析
转载请务必注明出处:https://www.cnblogs.com/the-wind/p/15764283.html 目录 1 背景介绍:两级逻辑 2 Quine-McCluskey两级逻辑化简 2. ...
- Celery框架从入门到精通
目录 Celery介绍.安装.基本使用 一.Celery服务 1.celery架构 2.celery快速使用 二.Celer包结构 1.创建clery包结构 2.Celery执行异步任务.延迟任务.定 ...
- SpringBoot使用OkHttp
参考文章: https://www.cnblogs.com/hongdada/p/9259965.html https://blog.csdn.net/qq_41890954/article/deta ...
- Jetson Xavier NX 试玩 (一)
Jetson Xavier NX 试玩 (一) 环境搭建 0 前言 NVIDIA家的Jetson系列是业内嵌入式边缘计算机的代表作,体积小,功能强是其最主要的优点. 学院入手了一款Jeston Xav ...
- Python ArcPy批量拼接长时间序列栅格图像
本文介绍基于Python中ArcPy模块,对大量不同时相的栅格遥感影像按照其成像时间依次执行批量拼接的方法. 在前期的文章Python arcpy创建栅格.批量拼接栅格中,我们介绍了利用Pyt ...
- SpringBoot 整合 Avro 与 Kafka
更多内容,前往IT-BLOG [需求]:生产者发送数据至 kafka 序列化使用 Avro,消费者通过 Avro 进行反序列化,并将数据通过 MyBatisPlus 存入数据库. 一.环境介绍 [1] ...
- 简单入门echart方法
图表用echart, 然后前端的 HTML 跟 nodejs , nodejs 去调用 后端PHP的接口 链接:https://www.jianshu.com/p/1f2c37c5c02f 官网:h ...
- [nefu]C++程序设计与分析实验 - 锐格
[nefu]C++程序设计与分析实验 - 锐格 第二章 C++基础 5330 #include<iostream> #include<iomanip> using namesp ...
- 验证ADG的坏块检测和自动修复
环境: Oracle 19c ADG(主库:单实例:备库:RAC) 1.主库新建测试文件 2.主库创建测试表 3.查询表对应数据文件信息 4.模拟数据文件物理坏块 5.查询对应测试表 6.进一步查询日 ...