p394

LeetCode p394 Decode String 题解

1.题目:

Given an encoded string, return it’s decoded string.
The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.
You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc.
Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there won’t be input like 3a or 2[4].
Examples:
s = “3[a]2[bc]”, return “aaabcbc”.
s = “3[a2[c]]”, return “accaccacc”.
s = “2[abc]3[cd]ef”, return “abcabccdcdcdef”.

题意:

按如上规则转换字符串。

2.解题思路:

见代码。。感觉我的写法有点暴力TUT
。。注意乘以的数字不一定是一位数,多位数也要切割出来。
注意各种切割的起始。

3.代码


[title] [] [url] [link text]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
public class Solution {
public String decodeString(String s) {
StringBuilder sb = new StringBuilder(s);
int start = 0;
int end = 0;
int num = 0;
int count = 0;
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '[') {
start = i;
// System.out.println(i);
// System.out.println(sb.charAt(i - 1));
while (i - 1 - count >= 0 && sb.charAt(i - 1 - count) >= '0'
&& sb.charAt(i - 1 - count) <= '9') {
count++;
}
num = Integer.valueOf(sb.substring(start - count, start) + "");
// System.out.println(num);
continue;
}
if (sb.charAt(i) == ']') {
end = i;
StringBuilder cBuilder = new StringBuilder();
for (int j = start + 1; j < end; j++) {
cBuilder.append(sb.charAt(j));
}
String aString = cBuilder.toString();
for (int j = 1; j < num; j++) {
cBuilder.append(aString);
}

sb.replace(start - count, end + 1, cBuilder.toString());

count = 0;
// System.out.println(sb.toString());
i = 0;

}

}
return sb.toString();
}
}

4.一些总结: