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();
        }
    }
    
  • 相关阅读:
    jquery tmpl 模板引擎 取小数点 三目运算
    ztree 根据id选中某一点且触发当前点的click事件
    rgb(123,25,62)拆分
    html5 vedio
    同一个dom上加单击事件和双击事件的冲突解决办法,双击事件方法进不去
    axios拦截器
    foreach、for、for in循环方式
    echarts markline 不同颜色
    组件里传值到父级
    vue路由钩子拦截器beforeEach和afterEach及页面路由变化路由监听
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946519.html
Copyright © 2011-2022 走看看