• 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();
        }
    }
    
  • 相关阅读:
    [VC++]轻松搞VC之定时器(Timer)
    [VC++]VC中如何获得当前系统时间
    [VC++]如何利用this获得窗口句柄
    SMART原则
    SQL配置
    术语百科
    关于SQL锁问题
    第六代OA办公理念(摘录)
    心动机型
    SQL2008R2的索引重建
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075129.html
Copyright © 2020-2023  润新知