zoukankan      html  css  js  c++  java
  • leetcode 394. 字符串解码

    题目描述:

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

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

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

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

    实例:

    s = "3[a]2[bc]", 返回 "aaabcbc".
    s = "3[a2[c]]", 返回 "accaccacc".
    s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

    思路分析:

    用到深搜的思想,借助栈通过递归实现。定义两个栈,一个int类型,保持每种字符串的出现次数;一个string类型,保持每种类型的字符串。遍历一遍字符串,对于不同字符做不同处理:

    数字:将字符数字转化为数字

    ‘[': 表示开始一种新的字符串类型,将其对应的出现次数存入栈中。当前的字符串存入字符串栈中。

    ‘]':表示当前字符串结束,统计出现次数,更新当前字符串栈栈顶元素,同时更新当前字符串表示。

    其他字符:更新当前字符串。

    代码:

     1 class Solution {
     2 public:
     3     
     4     string decodeString(string s) {
     5         if(s.size()==0)
     6             return s;
     7         stack<int>nums;
     8         stack<string>strs;
     9         string res="";
    10         int len = s.size();
    11         int num=0;
    12         for(int i=0; i<len; i++)
    13         {
    14             if(s[i]>='0' && s[i]<='9')
    15             {
    16                 num = num*10 + s[i]-'0';
    17             }
    18             else if(s[i]=='[')
    19             {
    20                 nums.push(num);
    21                 num=0;
    22                 strs.push(res);
    23                 res = "";
    24             }
    25             else if(s[i]==']')
    26             {
    27                 int times = nums.top();
    28                 nums.pop();
    29                 for(int t=0; t<times; t++)
    30                     strs.top() += res;
    31                 res = strs.top();
    32                 strs.pop();
    33             }
    34             else
    35             {
    36                 res += s[i];
    37             }
    38         }
    39         return res;
    40     }
    41 };
  • 相关阅读:
    阿里巴巴公布合伙人名单,董建华成为独董,俞永福未进入合伙人
    android cookie
    在Android的webview中定做js的alert,confirm和prompt对话框的方法
    浅谈WebView的使用 js alert
    Android的移动存储之SharedPreferences
    [android]-如何在向服务器发送request时附加已保存的cookie数据
    layout_weight
    我们是如何认识世界的
    挣钱和花钱
    时刻牢记“我是谁、为了谁、依靠谁” 始终践行党的群众观点和群众路线
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11423578.html
Copyright © 2011-2022 走看看