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".

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/decode-string

    题解

    • 用栈。
    • 注意数字可能不是一位的处理。
    • 代码写的可能有点啰嗦。可以先弹出再判断,而不是先peek。StringBuilder的操作要再了解一波。

    代码

    class Solution {
        public String decodeString(String s) {
            if(s==null){
                return null;
            }
            Stack<Character> stack=new Stack<>();
            for(int i=0;i<s.length();++i){
                if(s.charAt(i)!=']'){
                    stack.push(s.charAt(i));
                }
                else{
                    StringBuilder tempS=new StringBuilder("");
                    while(stack.peek()!='['){
                        tempS.append(stack.pop());
                    }
                    String tempStr=tempS.reverse().toString();
                    stack.pop();
                    
                    int num=0;
                    int pos=1;//
                    while(!stack.isEmpty()&&stack.peek()>='0'&&stack.peek()<='9'){//
                        num+=(stack.pop()-'0')*pos;//
                        pos*=10;
                    }
                    while(num--!=0){
                        for(int j=0;j<tempStr.length();++j){
                            stack.push(tempStr.charAt(j));
                        }
                    }
                }
            }
            StringBuilder decodedStr=new StringBuilder("");
            while(!stack.isEmpty()){
                decodedStr.append(stack.pop());
            }
            return decodedStr.reverse().toString();
        }
    }
    
  • 相关阅读:
    9 与python2交互
    8 内置函数(未完成)
    7 事务
    [转]jquery.vTicker(垂直滚动)
    2015年工作总结(2016-02-02)
    jQuery plugin : jqTransform
    JQuery知识总结
    JQuery事件处理的注意事项
    JQuery基本选择器
    [二]JQueryMobile常用的组件介绍
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11306359.html
Copyright © 2011-2022 走看看