394. 字符串解码
public String decodeString(String s) {
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
if(c != ']'){//如果不是']'把所有字符加入
stack.push(c);
}else{// 如果遇到']'说明 c[letter以及全部输入到栈中了
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty() && Character.isLetter(stack.peek())){//如果遇到了']',则把栈里所有 字符 都插入到sb中
sb.insert(0, stack.pop());
}
String letters = sb.toString();//sb转成字符串
stack.pop(); // 去除'['
sb = new StringBuilder();//重置StringBuilder准备记录数字
while(!stack.isEmpty() && Character.isDigit(stack.peek())){//如果遇到了数字,则记录数字,别忘了数字有位数,个位十位百位千位,不只是一位数字,所有数字都加入到sb中
sb.insert(0, stack.pop());
}
int count = Integer.valueOf(sb.toString());//把字符串转换为整数
//根据count次数,拆除[],再塞入到栈里去,由于stack只能放char字符,所以这里都拆成字符一个个放进去
while(count != 0){
for(char r : letters.toCharArray()){
stack.push(r);
}
count --;
}
}
}
StringBuilder res = new StringBuilder();
//取出栈中所有字符
while(!stack.isEmpty()){
res.insert(0, stack.pop());
}
return res.toString();
}
标签:count,StringBuilder,解码,pop,leetcode,394,sb,new,stack
From: https://www.cnblogs.com/phonk/p/16778922.html