题目:
思路:
参考:https://blog.csdn.net/xushiyu1996818/article/details/107973300
代码:
public String decodeString(String s){
Deque<Character> stack = new ArrayDeque<>();
for(char c :s.toCharArray()){
if(c != ']'){
stack.push(c); //把除了']'的所有都押入到栈中
}else{
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty()&& Character.isLetter(stack.peek())){
sb.insert(0,stack.pop());
}
String sub = sb.toString(); // 获得 [] 内的字符串
stack.pop(); // 去除 [ 括号 // 注意,这里容易出错,要记得pop
// step2 :获取倍数数字
sb = new StringBuilder();
while(!stack.isEmpty() && Character.isDigit(stack.peek())){
sb.insert(0,stack.pop());
}
int count = Integer.valueOf(sb.toString()); // 倍数
while(count > 0){ // 注意这里直接塞回去就好,不用拼成完成的ababab再塞回去
for(char ch:sub.toCharArray()){
stack.push(ch);
}
count--;
}
}
}
// 把栈里面所有的字母取出来
StringBuilder retv = new StringBuilder(); // 注意返回结果,将所有括号处理完,就可以从栈里返回了
while(!stack.isEmpty()){
retv.insert(0,stack.pop());
}
return retv.toString();
}