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();
        }
    }
    
  • 相关阅读:
    浅谈网站旁注入侵思路及需要的条件
    黑客破解网络密码的10种方法
    管理员必须掌握的八个cmd命令
    浅谈无线攻击技术思路
    windows下部署免费ssl证书(letsencrypt)
    用Let's Encrypt实现Https(Windows环境+Tomcat+Java)
    从 HTTP 到 HTTPS
    三种web性能压力测试工具
    ECS Windows系统使用自带监视器查看IIS并发连接数
    Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075129.html
Copyright © 2011-2022 走看看