首页 > 其他分享 >字符串解码(栈)

字符串解码(栈)

时间:2025-01-03 12:55:08浏览次数:1  
标签:string 示例 解码 括号 字符串 输入 数字

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

 

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"

示例 2:

输入:s = "3[a2[c]]"
输出:"accaccacc"

示例 3:

输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"

示例 4:

输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"

 

该题的难点在于遇到左括号与右括号该做什么

遇到左括号:将当前的数字和字符串压入栈中,并进行相应的重置

遇到右括号:将栈顶数字弹出,并重复当前字符串,然后拼接到栈顶字符串,并弹出。

所以遇到左括号要对数字栈和字符串栈插入元素,遇到右括号要对数字栈和字符串栈弹出栈顶元素

class Solution {
public:
    string decodeString(string s) {
        int num=0;
        stack<int> numStack;
        stack<string> strStack;
        string currentStr = "";
        for(char c:s){
            if(c>='0'&&c<='9'){//是数字
                num = num*10 +(c-'0');
            }else if(c>='a'&&c<='z'){//是小写字母
                currentStr +=c;
            }else if(c=='['){
                 // 遇到'[',将当前字符串和数字压入各自的栈
                strStack.push(currentStr);
                numStack.push(num);
                // 重置currentStr和num
                currentStr = "";
                num = 0;
            }else if(c==']'){
                // 遇到']',弹出数字并重复当前字符串
                int repeatTimes = numStack.top();
                numStack.pop();
                string temp = currentStr;
                for(int i=1;i<repeatTimes;i++){
                    temp+=currentStr;
                }
                //将重复后的字符串添加到上一层的字符串后面
                currentStr = strStack.top()+temp;
                strStack.pop();
            }
        }
        return currentStr;
    }
};

 

标签:string,示例,解码,括号,字符串,输入,数字
From: https://www.cnblogs.com/yueshengd/p/18649927

相关文章

  • 从位置到语境:解码 Contextual Position Encoding 的奥秘
    在自然语言处理(NLP)领域,Transformer模型已经成为了无可争议的主角。然而,尽管它们在许多任务中表现优异,却始终面临一个关键问题:如何有效地编码序列中的位置信息。传统的绝对位置编码(AbsolutePositionEncoding)和相对位置编码(RelativePositionEncoding)方法虽然解决了部分问......
  • Python字符串
    目录基本操作常用方法        Python中的字符串是一种常用的数据类型,用于存储和操作文本数据。字符串可以包含字母、数字、符号和空格等字符。以下是一些基本的字符串操作和特性:基本操作创建字符串在Python中,字符串可以用单引号'、双引号"或者三引号'''或"""......
  • 【cobalt strike】解码用于加载cobalt strike shellcode的简单.hta加载器过程
    #cobaltstrike我们将在本文介绍解码用于加载cobaltstrikeshellcode的简单.hta加载器的过程,接下来用文本编辑器执行初始分析,并使用CyberChef提取嵌入的shellcode,将使用模拟器(SpeakEasy)验证shellcode,使用Ghidra执行一些基本分析。哈希:2c683d112d528b63dfaa7ee0140eebc4960f......
  • 字符串操作
    python对于字符串能做的事情很多,比如从字符串中提取部分字符串,添加或者删除空白字符,将小写字母转换成大写,检查字符串格式是否正确,甚至你可以编写python代码访问粘贴板,复制或者粘贴。1.字符串的拼接字符串的拼接可以使用加号,也可以使用join函数,join函数的参数是一个可迭代对象,比......
  • leetcode热题100(394. 字符串解码)c++
    链接:394.字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格......
  • 在 Python 中,如何将日期时间类型转换为字符串?
    在Python中,将日期时间类型转换为字符串可以通过以下几种方式来实现:方法一:使用strftime()方法fromdatetimeimportdatetimenow=datetime.now()formatted_string=now.strftime("%Y-%m-%d%H:%M:%S")print(formatted_string)  strftime()方法可以根据指定的格......
  • 如何使用NodeJS对一个字符串加密
    在Node.js中,你可以使用各种加密算法来加密字符串。其中,crypto是Node.js内置的一个模块,它提供了完整的加密算法支持,包括对称加密(如AES)和非对称加密(如RSA)。以下是一个使用crypto模块中的createCipheriv方法进行AES加密的示例:constcrypto=require('crypto');constkey=crypto......
  • C# 字符串拼接
      在C#中,可以使用多种方法来拼接字符串,以下是几种常见的方法:使用加号(+)操作符:  stringstr1="Hello";stringstr2="World";stringresult=str1+""+str2;//"HelloWorld"使用String.Concat方法:  stringresult=S......
  • 华为OD机试真题---求字符串中所有整数的最小和
    一、题目描述输入字符串s,输出s中包含所有整数的最小和。说明字符串s,只包含a-zA-Z±;合法的整数包括1)正整数一个或者多个0-9组成,如0230021022)负整数负号-开头,数字部分由一个或者多个0-9组成,如-0-012-23-00023二、输入描述包含数字的字符串三、输出描述所......
  • 无人机双上行链路协调NOMA的自适应解码机制研究(Matlab代码实现)
      ......