image.png
解法
class Solution {
int i = 0;
public String decodeString(String s) {
LinkedList<String> res = new LinkedList<>();
while (i < s.length()) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
String digits = getDigits(s);
res.addLast(digits);
} else if (c == '[' || Character.isLetter(c)) {
res.addLast(String.valueOf(c));
i++;
} else {
// 不是上面的情况,就是遇到了右括号]
i++;
LinkedList<String> sub = new LinkedList<>();
while (!"[".equals(res.peekLast())) {
sub.addLast(res.removeLast());
}
Collections.reverse(sub);
String o = getString(sub);
res.removeLast();
// 对应的前缀数字
int num = Integer.parseInt(res.removeLast());
StringBuilder seg = new StringBuilder();
for (int i = 0; i < num; i++) {
seg.append(o);
}
res.addLast(seg.toString());
}
}
return getString(res);
}
public String getDigits(String s) {
StringBuilder sb = new StringBuilder();
while (Character.isDigit(s.charAt(i))) {
sb.append(s.charAt(i++));
}
return sb.toString();
}
public String getString(LinkedList<String> stringList) {
StringBuilder sb = new StringBuilder();
for (String s : stringList) {
sb.append(s);
}
return sb.toString();
}
}
网友评论