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

devtools/2024/9/20 7:08:11/ 标签: 算法, 深度优先

题目

在这里插入图片描述
题目链接:
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.ppmy.cn/devtools/16683.html

相关文章

linux 系统文件目录颜色及特殊权限对应的颜色

什么决定文件目录的颜色和背景&#xff1f; 颜色 说明 栗子 权限白色表示普通文件 蓝色表示目录 绿色表示可执行文件 浅蓝色链接文件 黄色表示设备文件 红色 表示压缩文件 红色闪烁表示链接的文件有问题 灰色 表示其它文件 可以用字符表示文件的类型&am…

芯片制造的成本与定价

芯片制造的成本与定价之间存在密切关系,芯片制造商在设定产品价格时会充分考虑制造成本,并结合市场策略、竞争态势、客户接受度等多个因素来制定最终售价。以下是关于芯片制造成本与定价之间相互作用的一些关键点: 1. 成本构成 芯片制造成本主要包括以下几个方面: 设计成本…

信息系统项目管理师0069:数据运维(5信息系统工程—5.2数据工程—5.2.3数据运维)

点击查看专栏目录 文章目录 5.2.3数据运维1.数据存储2.数据备份3.数据容灾4.数据质量评价与控制记忆要点总结5.2.3数据运维 数据开发利用的前提是通过合适的方式将数据保存到存储介质上,并能保证有效的访问,还要通过数据备份和容灾手段,保证数据的高可用性。数据质量管理是在…

AI电销机器人系统源码部署之:freeswitch安装Linux

安装 FreeSWITCH&#xff08;一个开源的电话交换系统&#xff09;通常需要一些步骤&#xff0c;以下是在 Linux 系统上安装 FreeSWITCH 的基本指南&#xff1a; 准备工作&#xff1a; 确保你有一个运行 Linux 的服务器&#xff0c;并且有 root 或者具有 sudo 权限的用户。确保服…

一文详解视觉Transformer模型压缩和加速策略(量化/低秩近似/蒸馏/剪枝)

视觉Transformer&#xff08;ViT&#xff09;在计算机视觉领域标志性地实现了一次革命&#xff0c;超越了各种任务的最先进模型。然而&#xff0c;它们的实际应用受到高计算和内存需求的限制。本研究通过评估四种主要的模型压缩技术&#xff1a;量化、低秩近似、知识蒸馏和剪枝…

OSPF的协议特性

路由汇总的概念 l 路由汇总&#xff08; Route Aggregation &#xff09;&#xff0c;又称路由聚合&#xff08;Route Summarization&#xff09;&#xff0c;指的是把一组明细路由汇聚成一条汇总路由条目的操作 l 路由汇总能够减少路由条目数量、减小路由表规模&#xff0…

什么是OCR转换?

OCR转换是指将图片或扫描文档中的文字内容转换成电子文本的过程。OCR代表光学字符识别&#xff08;Optical Character Recognition&#xff09;&#xff0c;是一种通过算法和模型来识别图像或文档中的文字&#xff0c;并将其转换成可编辑、可搜索的文本格式。OCR转换通常包括以…

mysql服务器无法启动问题处理

一台hlr服务器用网关软件登录失败&#xff0c;查找原因&#xff0c;发现网关软件连接服务器的tcp的10002端口失败&#xff0c;超时无应答&#xff0c;导致连接失败。 用户反馈核心网hlr&#xff0c;smc无法登录&#xff0c;putty登录服务器&#xff0c;发现hlr10002端口没有打…

http忽略ssl认证

我们在发请求时&#xff0c;会遇到需要ssl证书验证的报错&#xff0c;针对该错误以及所使用的不同的创建连接的方式&#xff0c;进行ssl证书忽略 忽略SSL证书的流程 简介&#xff1a;需要告诉client使用一个不同的TrustManager。TrustManager是一个检查给定的证书是否有效的类…

【Matlab函数分析】对二维或三维散点数据插值函数scatteredInterpolant

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

使用git将本地项目上传到github

大致的流程是&#xff1a;创建本地仓库&#xff0c;把代码传到本地仓库&#xff0c;把本地仓库内容传到远程仓库。还不太完整&#xff0c;逐渐摸索使用吧 1、初始化仓库 git init在本地项目的路径中初始化一个仓库。 2、提交到本地 选择需要上传的文件 git add .提交到本地…

CMake+qt+Visual Studio

#使用qt Creator 创建Cmake 项目,使用Cmake Gui 生成sln 工程&#xff0c;使用Visual Studio 开发 ##使用qt Creator 创建CMake项目 和创建pro工程的步骤一致&#xff0c;只是在选择构建系统的步骤上选择CMake,接下来步骤完全相同 工程新建完成之后&#xff0c;构建cmake 项…

第11章 Android特色开发——基于位置的服务

第11章 Android特色开发——基于位置的服务 本章中&#xff0c;将要学习一些全新的Android技术&#xff0c;这些技术有别于传统的PC或Web领域的应用技术&#xff0c;是只有在移动设备上才能实现的。 基于位置的服务&#xff08;Location Based Service&#xff09;。由于移动…

机器学习(三)之监督学习2

前言&#xff1a; 本专栏一直在更新机器学习的内容&#xff0c;欢迎点赞收藏哦&#xff01; 笔者水平有限&#xff0c;文中掺杂着自己的理解和感悟&#xff0c;如果有错误之处还请指出&#xff0c;可以在评论区一起探讨&#xff01; 1.支持向量机&#xff08;Support Vector Ma…

STM32中断系统详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 中断基本概念 2. STM32中断 3. NVIC的基本组件 3.1 NVIC的基本组件 3.2 NVIC的优先级 4. EXTI外部中断 4.1 基本概念 4.2 基本结构 5. AFIO 1. 中断基本概念 中断&#xff08;Interrupt&…

数据结构--顺序表

顺序表&#xff1a;顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改。 1&#xff0c;自己实现一个基础的顺序表&#xff1a; // 新增元素,默认在数组最后新增 void add(int data); // 在 po…

STCAD转换 晶联讯1353(5VLCD)显示

/***晶联讯1353(5VLCD)显示调节电位器参数变化***/ /******2018 6 30 08:50*L252 CODE 1339 ******/ /***变频器 PWM2017 5 6板测试AD晶联讯1353*****/ #include <reg52.h> // #define uint unsigned int …

云计算革新:以太网 Scale-UP 网络为 GPU 加速赋能

谈谈基于以太网的GPU Scale-UP网络 Intel Gaudi-3 采用 RoCE 互联技术&#xff0c;促进了 Scale-UP 解决方案。业界专家 Jim Keller 倡导以太网替代 NVLink。Tenstorrent 成功应用以太网实现片上网络互联。RoCE 和以太网已成为互联解决方案的新兴趋势&#xff0c;为高性能计算提…

【漏洞复现】SpringBlade dict-biz SQL注入漏洞

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的微服务架构 采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。 0x02 漏洞概述 SpringBlade d…

在 Ubuntu 和 CentOS 上重新配置 Fail2Ban

遇到的问题 最近,我在管理服务器时遇到了一个问题。我的服务器上运行着 Fail2Ban,用于保护服务器免受暴力登录攻击。然而,由于某些原因,我需要卸载并重新配置 Fail2Ban。这个过程涉及到停止服务、卸载软件包、清理配置文件和数据、重新安装以及配置新的规则。 在这篇博客中,我…