牛客NC199 字符串解码【中等 递归,栈的思想 C++/Java/Go/PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92
相同题目:
https://www.lintcode.com/problem/575

思路

解法和基础计算器1,2,3类似,递归

参考答案C++

struct Info {string str;int stopindex;Info(string e, int c) : str(e), stopindex(c) {}
};class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @return string字符串*/string decodeString(string s) {//解法和基础计算器1,2,3类似,递归return process(s, 0).str;}Info process(string s, int idx) {string str;int cur = 0;while (idx < s.size() && s[idx] != ']') {char c = s[idx];if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {str += c;idx++;} else if (c >= '0' && c <= '9') {cur = cur * 10 + int(c - '0');idx++;} else { //遇到[  需要递归获取[...] 的结果Info info = process(s, idx + 1);str += getStr(info.str, cur);cur = 0;idx = info.stopindex + 1;}}return Info(str, idx);}string getStr(string s1, int count) {string ans;for (int i = 0; i < count; i++) {ans += s1;}return ans;}
};

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @return string字符串*/public String decodeString (String s) {//解法和基础计算器1,2,3类似,递归return process(s, 0).ans;}public Info process(String s, int i) {StringBuilder ans = new StringBuilder();int cur = 0;while (i < s.length() && s.charAt(i) != ']') {char c = s.charAt(i);if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {ans.append(c);i++;} else if (c >= '0' && c <= '9') {cur = cur * 10 + c - '0';i++;} else { //遇到[Info next = process(s, i + 1);ans.append(getStr(next.ans, cur));cur = 0;i = next.stopIndex + 1;}}return new Info(ans.toString(), i);}public String getStr(String str, int count) {StringBuilder sb = new StringBuilder();for (int i = 0; i < count ; i++) {sb.append(str);}return sb.toString();}static class Info {String ans;int stopIndex;public Info(String s, int e) {ans = s;stopIndex = e;}}
}

参考答案Go

package mainimport "bytes"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @return string字符串*/
func decodeString(s string) string {//本答案和解答基础计算器1,2,3的思路类似//递归。遇到字母,遇到数字,遇到[  三种情况return process(s, 0).str
}func process(s string, idx int) Info {var buf bytes.Buffercur := 0for idx < len(s) && s[idx] != ']' {c := s[idx]if (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') {buf.WriteString(string(c))idx++} else if c >= '0' && c <= '9' {cur = cur*10 + int(c-'0')idx++} else { //遇到[  递归去吧,我需要递归的结果info := process(s, idx+1)buf.WriteString(getStr(info.str, cur))cur = 0idx = info.stopindex + 1}}return Info{buf.String(), idx}
}func getStr(str string, count int) string {var buf bytes.Bufferfor i := 0; i < count; i++ {buf.WriteString(str)}return buf.String()
}type Info struct {str       stringstopindex int
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param s string字符串 * @return string字符串*/
function decodeString( $s )
{//本答案和解答基础计算器1,2,3的思路类似//递归。遇到字母,遇到数字,遇到[  三种情况return process($s,0)->str;
}function process($s,$idx) {$str ='';$cur=0;while ($idx <strlen($s) && $s[$idx] !=']') {$c = $s[$idx];if(($c>='a' && $c<='z') ||($c>='A' && $c <='Z')){$str.=$c;$idx++;}else if($c>='0' && $c<='9'){$cur =$cur*10+intval($c-'0');$idx++;}else{ //遇到[ 了,递归获取[...] 中等的结果$info = process($s,$idx+1);$str.=(getStr($info->str,$cur));$cur =0;$idx = $info->stopindex+1;}}return new Info($str,$idx);
}function getStr($s,$count){$str = '';for($i=0;$i<$count;$i++){$str.=$s;}return $str;
}class Info{public $str;public $stopindex;public function __construct($a,$b){$this->str = $a;$this->stopindex = $b;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AOC vs. DAC:哪个更适合您的网络需求?

在现代网络通信中&#xff0c;选择合适的连接线缆对于数据传输的稳定性和速度至关重要。两种常见的线缆类型是 AOC&#xff08;Active Optical Cable&#xff09; 和 DAC&#xff08;Direct Attach Cable&#xff09;。本文将详细介绍这两种线缆的特点、优势和适用场景&#xf…

Aigtek:介电弹性体高压放大器在软体机器人研究中的应用

近年来软体机器人的研究成为目前机器人研究领域的热点&#xff0c;由于软体材料的自由度可以根据需求自由变化&#xff0c;因此软体机器人有着极高的灵活性&#xff0c;而且软体机器人因其材料的柔软性有着很好的人机交互性能和安全性。它的出现成功解决了传统的刚性机器人人机…

JavaScript云LIS系统概述 前端框架JQuery+EasyUI+Bootstrap医院云HIS系统源码 开箱即用

云LIS系统概述JavaScript前端框架JQueryEasyUIBootstrap医院云HIS系统源码 开箱即用 云LIS&#xff08;云实验室信息管理系统&#xff09;是一种结合了计算机网络化信息系统的技术&#xff0c;它无缝嵌入到云HIS&#xff08;医院信息系统&#xff09;中&#xff0c;用于连…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

Oracle 监控 SQL 精选 (一)

Oracle数据库的监控通常涉及性能、空间、会话、对象、备份、安全等多个层面。 有效的监控可以帮助 DBA 及时发现和解决问题&#xff0c;提高数据库的稳定性和性能&#xff0c;保障企业的数据安全和业务连续性。 常用的监控指标有&#xff1a; 性能指标&#xff1a; 查询响应时间…

抽象工厂模式(Redis 集群升级)

目录 定义 Redis 集群升级 模拟单机服务 RedisUtils 模拟集群 EGM 模拟集群 IIR 定义使⽤接⼝ 实现调⽤代码 代码实现 定义适配接⼝ 实现集群使⽤服务 EGMCacheAdapter IIRCacheAdapter 定义抽象⼯程代理类和实现 JDKProxy JDKInvocationHandler 测试验证 定义 …

Mockaroo - 在线生成测试用例利器

简介&#xff1a;Mockaroo 是一个无需安装的在线工具&#xff0c;用于生成大量的自定义测试数据。它支持多种数据格式&#xff0c;如JSON、CSV、SQL和Excel&#xff0c;并能模拟复杂的数据结构。 历史攻略&#xff1a; 测试用例&#xff1a;多条件下编写&#xff0c;懒人妙用…

ChatGPT付费创作系统V2.8.4独立版 WEB+H5+小程序端 (新增Pika视频+短信宝+DALL-E-3+Midjourney接口)

小狐狸GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;无限多…

网盘——文件重命名

文件重命名具体步骤如下&#xff1a; 目录 1、具体步骤 2、代码实现 2.1、添加重命名文件的槽函数 2.2、关联重命名文件夹信号槽 2.3、添加重命名文件的协议 2.4、添加槽函数定义 2.5、服务器 2.6、添加重命名文件的case 2.7、客户端接收回复 3、测试 3.1、点击重命…

debian配置四叶草输入法

效果展示 一、前言 在linux下体验比较好的输入法只有两款&#xff1a;搜狗输入法、四叶草输入法。 ubuntu下可以成功配置搜狗输入法&#xff0c;但debian下从来没有成功过。 今天在用fcitx5 四叶草时发现VNC远程输入法会失灵&#xff0c;于是改用了ibus 四叶草&#xff0c…

Qt : 禁用控件默认的鼠标滚轮事件

最近在写一个模拟器&#xff0c;在item中添加了很多的控件&#xff0c;这些控件默认是支持鼠标滚动事件的。在数据量特别大的时候&#xff0c;及容易不小心就把数据给修改了而不自知。所有&#xff0c;我们这里需要禁用掉这些控件的鼠标滚轮事件。 实现的思想很简单&#xff0c…

原生微信小程序中案例--仿boss区域树选择列多选功能

1. 需求描述&#xff1a; 区域三级列表&#xff0c; 有添加&#xff0c;编辑&#xff0c;删除功能。 选择父级分类&#xff0c;其下子类全部选中&#xff0c;当前分类后加标志显示全字样取消选中子类&#xff0c;其父类分类后标志显示选中数量若子类全部选中&#xff0c;除当…

对2023年图灵奖揭晓看法

2023年图灵奖揭晓&#xff0c;你怎么看&#xff1f; 2023年图灵奖&#xff0c;最近刚刚颁给普林斯顿数学教授 Avi Wigderson&#xff01;作为理论计算机科学领域的领军人物&#xff0c;他对于理解计算中的随机性和伪随机性的作用&#xff0c;作出了开创性贡献。这些贡献不仅推…

【stomp 实战】spring websocket源码分析之握手请求的处理

上一节【搭建一套websocket推送平台】我们通过一个项目&#xff0c;实现了一套推送平台。由于spring框架对于websocket的支持和stomp协议的良好封装&#xff0c;我们很容易地就实现了websocket的消息推送功能。虽然搭建这么一套推送系统不难&#xff0c;但是如果不了解其底层原…

Spring Cloud Alibaba Sentinel 使用

初识Sentinel Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址&#xff1a; home | Sentinel 需要了解的概念 簇点链路 在学习 Sentinel 的使用之前&#xff0c;我们有必要首先了解一下簇点链路。当请求进入微服务时&#xff0c;首先会访Controller、Service、Ma…

赋能智慧校园!A3D数字孪生可视化,轻量又高效!

放假之后&#xff0c;学生们会逐步返学&#xff0c;大量人员出入校园&#xff0c;安全更是不容忽视&#xff0c;如何在短时间内对大批人员及设施进行智能监管&#xff1f;数字化转型是关键手段&#xff0c;我们可以融合线上线下数据&#xff0c;搭建3D立体的智慧校园&#xff0…

Unity 按下Play键后,Scene View里面一切正常,但是Game View中什么都没有 -- Camera Clear Flags的设置

问题如下所示。 最先遇到这个问题是我想用Unity开发一个VR 360-degree Image Viewer。在Scene View中可以看到球体&#xff0c;但是Game View什么都看不到。最后找到的原因是&#xff0c;我使用的shader是Skybox/Panorama&#xff0c; 需要把Main Camera的Clear Flags设置成Do…

hanoi塔

hanoi塔问题&#xff1a; 1.规则&#xff1a;一次移动一个盘子&#xff0c;小盘子压大盘子上面&#xff0c;有A、B、C三个柱子&#xff0c;A是起始放盘子的柱子&#xff0c;B是中间可以借助的柱子&#xff0c;C是最后放盘子的位置 2.简单思路&#xff1a; 如果有1个盘子&…

netsh int ipv4 show dynamicport tcp动态端口port设置

netsh int ipv4 show dynamicport tcp netsh int ipv4 set dynamicport tcp start4000 num10000

【Go语言快速上手(四)】面向对象的三大特性引入

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; GO快速上手 1. 前言2. 初识GO中的结构…