zoukankan      html  css  js  c++  java
  • 13字符串解码(394)

    作者: Turbo时间限制: 1S章节: DS:栈

    晚于: 2020-07-15 12:00:00后提交分数乘系数50%

    截止日期: 2020-07-22 12:00:00

    问题描述 :

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

    编码规则为: 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"

    可参考以下main函数:

    int main()

    {

        string str;

        getline(cin,str);

        string result=Solution().decodeString(str);

        cout<<result<<endl;

        return 0;

    }

    输入说明 :

    输入一行,表示经过编码的字符串

    输出说明 :

    输出一行,表示解码后的字符串

    输入范例 :

    3[a2[c]]

    输出范例:

    accaccacc
    #include <iostream>
    #include <stack>
    #include <string>
    using namespace std;
    class Solution {
    public:
        string decodeString(string s)
        {
            string res="";//用来存放最终的结果
            stack<string> zf;//字符栈
            stack<int> sz;//数字栈
            int sum=0;
            for(int i=0;i<s.length();i++)
            {
                if(s[i]>='0'&&s[i]<='9')//转换数字 
                    sum=sum*10+s[i]-'0';
                else if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))//判断字符 
                    res+=s[i];
                else if(s[i]=='[')//如果是左方框,把数字和字符 分别入栈,并清空 
                {
                    sz.push(sum);
                    sum=0;
                    zf.push(res);
                    res="";
                }
                else
                {
                    int beishu=sz.top();
                    sz.pop();
                    for(int j=0;j<beishu;j++)
                    {
                        zf.top()+=res;
                    //    cout<<"j:"<<j<<" "<<zf.top()<<endl;
                    } 
                    res=zf.top();
                    zf.pop();
                }
    
            }
            return res;
        }
    };
    int main()
    {
        string str;
        cin>>str;
        string result=Solution().decodeString(str);
        cout<<result<<endl;
        return 0;
    }
  • 相关阅读:
    理解margin
    dedecms 时间标签strftime和MyDate
    dede调用img图片
    dedecms中调用制定栏目
    在list_*页面显示出一级栏目下的所有二级栏目
    调用二级、三级栏目
    dedecms二级导航标签调用使用的方法
    学习PHP第一天-----简单登录
    Python程序设计9——数据库编程
    Python程序设计8——网络编程
  • 原文地址:https://www.cnblogs.com/zmmm/p/13618942.html
Copyright © 2011-2022 走看看