当前位置: 首页 > article >正文

字符串的解码--leetcode 394

 参考题目如下:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目:

给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: 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:

    //最后结果出现的顺序一定是每个字母和[]内出现的次序相一致,无非是括号内部的数据出现了几次而已。所以从头来,如果没有数字和括号
    //直接将结果进行保存。如果有的话,那么就先加入一个括号的内容,在添加n-1个就可以了。
    string decodeString(string s) {

        string ans;

        stack<pair<int,int>> stk;
        //[]  内数字的数量
        int count=0;


        for(auto x:s){

            //如果是数字的话,就计算数字的数量。
            if(isdigit(x)){

                //32[abc]  要保证多位数字也同时可以满足相应的要求。
                count=count*10+(x-'0');
                

            }

            else if(x=='['){

                //如果是左括号就是先记录里面的数字的数量,和当前答案的大小。
                stk.push({count,ans.size()});
                //将对应0 归于0.
                count=0;


            }



            else if(isalpha(x)){
                ans+=x;
            }


            else{


                int times=stk.top().first;
                string temp=ans.substr(stk.top().second,ans.size()-stk.top().second);

                for(int i=0;i<times-1;i++){

                    ans+=temp;

                }

                stk.pop();

                
            }









        }

        return ans;



    }
};

        


http://www.kler.cn/a/234811.html

相关文章:

  • 【Spring】Spring框架之-AOP
  • Marin说PCB之POC电路layout设计仿真案例---06
  • Tekscan压力分布测量系统:电池安全与质量提升的保障
  • WordPress 去除?v= 动态后缀
  • 不会心理描写,神态描写怎么办?
  • PHP接入美团联盟推广
  • .NET Core 3 foreach中取索引index
  • 《动手学深度学习(PyTorch版)》笔记7.3
  • 【Linux技术宝典】Linux入门:揭开Linux的神秘面纱
  • Python requests模块 快速入门 这篇就够了
  • 中国电子学会2019年12月份青少年软件编程Scratch图形化等级考试试卷三级真题(选择题、判断题)
  • 导入jar包的办法,若Maven报日志错误,Cannnot resolve XXXXX.jar
  • Springboot+vue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目
  • leetcode——滑动窗口题目汇总
  • python中的数组和list的异同
  • C语言之随心所欲打印三角形,金字塔,菱形(倒金字塔)
  • Go语言每日一练——链表篇(五)
  • Spring Cloud Hystrix 参数配置、简单使用、DashBoard
  • vim 启用鼠标复制粘贴
  • LeetCode Python - 9.回文数
  • IP地址如何保护网络安全
  • 自然语言处理(NLP)—— 基本概念
  • ThreeDPose
  • MongoDB数据迁移
  • Rust入门问题: use of undeclared crate or module `rand`
  • ubuntu彻底卸载cuda 重新安装cuda