牛客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;而且软体机器人因其材料的柔软性有着很好的人机交互性能和安全性。它的出现成功解决了传统的刚性机器人人机…

链表-LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRU是Least Recently Used的缩写&#xff0c;意为“最近最少使用”。LRU是一种常用的缓存淘汰策略&#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; 查询响应时间…

实验二: 密码恢复

1.实验环境 用路由器和交换机搭建实验环境 2.需求描述 实现管理员主机对交换机和路由器的远程管理 设备上配置的密码都要被加密 3.推荐步骤 对于路由器的步骤如下&#xff1a; 重启路器&#xff0c;并按下 CtrlBreak 组合键中断0S 的加载&#xff0c;路由器将进入ROM Mon…

AUTOSAR OS Alarm讲解

Alarm定义 使用中断ISR可以构建以不同速率激活任务的系统。然而,对于复杂的系统,这种方式效率不高且不切实际。alarm(警报)提供了一种更方便、更灵活的调度系统的方式。 alarm由两部分组成: 一个计数器一个或多个与计数器关联的alarmalarm指定当达到特定的计数器值时要执…

千行 MySQL 学习笔记总结大全,语法大全

Windows服务 -- 启动MySQLnet start mysql -- 创建Windows服务sc create mysql binPath mysqld_bin_path(注意&#xff1a;等号与值之间有空格) 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示…

抽象工厂模式(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…

cos + vue + Element UI 上传文件的实现

这是将本地文件上传到腾讯云服务器的基本方法&#xff0c;官方也有相应的文档&#xff0c;需要的同学可以去官方文档查看。腾讯云官方文档&#xff0c;着急的同学可以 跟着以下步骤快速实现。 &#xff08;1&#xff09;安装 SDK 并引入 安装&#xff1a; npm i cos-js-sdk-…