zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 394 字符串解码

    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"
    

    .

    class Solution {
        public String decodeString(String s) {
            StringBuilder result = new StringBuilder();
            StringBuilder sb = new StringBuilder();
            int count = 0;
            for (int i = 0; i < s.length(); i++) {
                char ch = s.charAt(i);
                if (ch >= '0' && ch <= '9') {
                    if (count == 0) {
                        result.append(sb);
                        sb.delete(0, sb.length());
                    }
                    count = count * 10 + ch - '0';
                } else if (ch == '[') {
                    int endIndex = findEndBracket(s, i + 1);
                    result.append(getRepeatString(decodeString(s.substring(i + 1, endIndex)), count));
                    count = 0;
                    i = endIndex;
                    sb.delete(0, sb.length());
                } else {
                    sb.append(ch);
                }
            }
            result.append(sb);
            return result.toString();
        }
    
        public int findEndBracket(String str, int startIndex) {
            int countBracket = 1;
            for (int j = startIndex; j < str.length(); j++) {
                char chj = str.charAt(j);
                if (chj == '[') {
                    countBracket++;
                } else if (chj == ']') {
                    countBracket--;
                    if (countBracket == 0) {
                        return j;
                    }
                }
            }
            return str.length();
        }
    
        public String getRepeatString(String str, int count) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < count; i++) {
                sb.append(str);
            }
            return sb.toString();
        }
    }
    
  • 相关阅读:
    vue项目锚点定位+滚动定位
    elementUI 弹出框添加可自定义拖拽和拉伸功能,并处理边界问题
    密码检验规则(字母数字和特殊字符组成的混合体)
    分布式版本控制系统git
    自动生成滚动条
    jq中append(),appendTo(),after(),before(),prepend(),prependTo()的用法
    清除浮动的几种方式
    王者荣耀周年福利活动绕过微信屏蔽
    看不懂源码?先来恶补一波Object原型吧
    Vue组件化开发
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946519.html
Copyright © 2011-2022 走看看