使得括号[]内的字母乘上外面的数字的倍数作为一个新的字符串。
最终返回整个字符串的真正字符串
利用一个栈来完成,当遇到左括号的时候,将此时的数字和res分别放到他们的栈中,然后创建新的数字和res来存括号内的内容。
当遇到右括号的时候,创造一个新的sb,然后取出之前栈中的数字,循环这么多次来拼接字符串。把之前字符串栈中的字符串res取出并拼接现在的字符串。
当遇到数字的时候,将数字字符转化为数字,转换的时候就让此时的num等于num*10+这个数字。
如果什么都不是则是字母,则直接拼接到字符串结果res中就可以。
class Solution {
public String decodeString(String s) {
if(s==null || s.length()==0)return s;
char[] chars=s.toCharArray();
StringBuilder res=new StringBuilder();
Integer num=0;
Deque<Integer> dqNum=new LinkedList<Integer>();
Deque<StringBuilder> dqRes=new LinkedList<StringBuilder>();
for(int i=0;i<chars.length;i++){
if(chars[i]=='['){
dqNum.push(num);
dqRes.push(res);
res=new StringBuilder();
num=0;
}else if(chars[i]==']'){
StringBuilder sb=new StringBuilder();
int count=dqNum.pop();
for(int j=0;j<count;j++){
sb.append(res);
}
res=new StringBuilder(dqRes.pop().append(sb));
}else if(chars[i]>='0' && chars[i]<='9'){
num=num*10+(chars[i]-'0');
}else{
res.append(chars[i]);
}
}
return res.toString();
}
}