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)
}

执行结果如下:


左神java代码

2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k的更多相关文章

  1. Struts标签<s:if>判断字符串是否包含一个固定的值

    Struts标签<s:if>判断字符串是否包含一个固定的值:1.如果比较对象是字符串: <s:if test="str.contains('判断是否包含的字符串')&quo ...

  2. HashTable集合和练习题_计算一个字符串中每一个字符出现的次数

    HashTable集合 /** * java.util.Hashtable<K,V>集合 implement Map<K,V>接口 * Hashtable:底层也是一个哈希表, ...

  3. 给定一个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]} ...

  4. 给定一个字符串,仅由a,b,c 3种小写字母组成。

    package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...

  5. 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。

    题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...

  6. 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

    // 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba ...

  7. 查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。)

    给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表. 例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 ...

  8. 核心API的使用(给定一个字符串,统计每个字符出现的次数)

    /** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...

  9. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  10. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

随机推荐

  1. 学习记录--C++组合+依赖+依赖倒置

    组合关系:表示类之间的关系是整体与部分的关系.即has a / contains a的关系 在面向对象程序设计中,将一个复杂对象分解为简单对象的组合. 在代码中,体现为将一个或多个类的对象作为另一个类 ...

  2. java 程序运行机制

    java 程序运行同时拥有 编译型语言和解释型语言的特点 程序运行流程: 源程序 .java文件 --> Java 编译器--> 字节码 .class 文件 --> 类装饰器 --& ...

  3. 基于element-ui进行二次封装的表格组件

    <!-- * @description 表格组件 * @fileName TableList.vue * @authorQ * @date 2021/05/15 15:13:45 --> ...

  4. 量子图形加密算法的MATLAB代码实现

    一.概述 目前主流的量子图形加密算法有量子像素编码算法(Quantum Image Pixel Encoding,QIPE).量子像素置乱算法(Quantum Image Pixel Scrambli ...

  5. 迁移学习(CDAN)《Conditional Adversarial Domain Adaptation》(已复现迁移)

    论文信息 论文标题:Conditional Adversarial Domain Adaptation论文作者:Yaroslav Ganin, Evgeniya Ustinova, Hana Ajak ...

  6. Python学习笔记--循环的知识以及应用

    while循环 代码: 结果: 案例:求1-100的和 实现: 案例:while循环猜数字 实现: while循环的嵌套使用 案例:打印九九乘法表 (注意:要是想要输出不换行,代码可以这样写:prin ...

  7. wx.BoxSizer布局管理器用法,及其Add()方法参数说明

    wx.BoxSizer 布局管理器是一种常见的布局管理器,它可以在水平或垂直方向上布置子窗口部件.同时,它还可以在水平或垂直方向上包含其他 wx.BoxSizer 来创建复杂的布局. 下面是 wx.B ...

  8. T-Dubbo,最好的RPC接口测试工具,支持nacos、zookeeper两大主流注册中心,真香!

    这可能是有史以来最好用的RPC接口测试工具 文末有视频简介 获取方式 一只小Coder 简介 T-Dubbo,是一个基于Dubbo的全自动RPC接口测试平台为当下最流行的微服务架构中的RPC接口提供了 ...

  9. 中高等DP总结(更新中

    1.CF613D Kingdom and its Cities 题意:给定一棵树,每个询问给出一些关键点,要求删掉最少的点使这些点两两不联通,无解输出-1. 思路:先判无解:只要有一个关键点的父亲也是 ...

  10. crontab使用说明【一文搞懂Linux定时任务Crontab】

    1.简介 cron是一个在后台运行调度的守护进程,而crontab是一个设置cron的工具.cron调度的是/etc/crontab文件. 2.centos安装crontab yum install ...