欢迎大家关注我的以下主页,尤其是今日头条!!!谢谢🙏🙏🙏
csdn:雷园的csdn博客
个人博客:雷园的个人博客
简书:雷园的简书
今日头条:来自底层程序员的仰望
前言
- 最近准备把算法慢慢的捡起来,但是因为工作是在太忙。所以准备不定时更一道算法题目,难度自然是由简入难,所以同学们可以不定时查看小编的更新。
- 北京的生活总是匆忙的,希望在北京的活着将要来北京生活的伙伴们,不要被这无情的生活淹没。最起码抽出一些时间,来做一些自己喜欢的事情。
题目:字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string]
,表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a
或 2[4]
的输入。
示例:
s1 = "3[a]2[bc]", 返回 "aaabcbc".
s2 = "3[a2[c]]", 返回 "accaccacc".
s3 = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".
解题思路
-
由题我们可以看出输入是规范化输入,不会包含其他错误的字符或者是有括号不匹配的问题,我们可以认为输入都是正确的。
-
由示例字符串s1可以看出,输入中不仅包含单层括号,同时也包含多层嵌套的关系。
-
需要注意数字可能并不只是个位数字、字符同理,所以我们需要对数字和字符分开处理。
-
我们简单的说一下递归的含义:我们需要将复杂的问题进行拆分,逐步的将其转变为n个简单的小问题。例如:你怎样才能移动100个箱子?答案:你首先移动一个箱子,并记下它移动到的位置,然后再去解决较小的问题:你怎样才能移动99个箱子?最终,你的问题将变为怎样移动一个箱子。
-
那接下来我们对当前问题进行一下分析。
-
当前的问题是,字符串总包含n组数字+[字符],需对该字符串进行解码。
-
我们认为他只有一组数字+[字符],会有这样的解:
int count = 0; for (; i < s.length() && s.charAt(i) != ']'; i++) { if ((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')) sb.append(s.charAt(i)); else { while ((s.charAt(i) >= '0' && s.charAt(i) <= '9')) { count = count * 10 + s.charAt(i++) - '0'; } i++; String temp = get(s); } } while (count != 0) { sb.append(temp); count--; }
-