直接上代码,外国的最高赞,跟着程序debug一遍就懂了
class Solution {
public String decodeString(String s) {
//用栈来存
Stack<Character> stack = new Stack<>();
char[] c = s.toCharArray();
for (char c1 : c) {
//将不是‘[’的全部进站
if (c1 != ']'){
stack.push(c1);
}else {
//先将所有字母拿出来
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty() && Character.isLetter(stack.peek())){//栈不为空并且栈顶为字母
sb.insert(0,stack.pop());
}
//用sub存sb的结果
String sub = sb.toString();
//弹出[
stack.pop();
//再把数字拿出来
sb = new StringBuilder();
while (!stack.isEmpty() && Character.isDigit(stack.peek())){
sb.insert(0,stack.pop());
}
int cnt = Integer.parseInt(sb.toString());
//再根据结果拼接
for (int i = 0; i < cnt; i++) {
for (char c2 : sub.toCharArray()) {
stack.push(c2);
}
}
}
}
//将栈中的东西拿出来
StringBuilder sb = new StringBuilder();
int size = stack.size();
for (int i = 0; i < size; i++) {
sb.insert(0,stack.pop());
}
return sb.toString();
}
}