题目描述
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
求解思路
-
这道题目是基于栈来做的,可以将数字存进一个栈中,将字母存进另一个栈中;
-
当遍历到数字时:将数字存进临时变量 fre ;
-
当遍历到字母时: 将字母存进临时变量 res ;
-
当遇到 [ 时,将 fre 和 res 分别压栈;
-
当遇到 ] 时,将分别弹出栈顶元素,在后面加上 当前 res 循环 n 次;
-
最后返回 res 即可。
输入输出示例
代码
class Solution {
public String decodeString(String s) {
Deque<Integer> shuziDeque = new ArrayDeque<>();
Deque<String> zimuDeque = new ArrayDeque<>();
String res = "";
int fre = 0;
for(int i = 0; i < s.length(); i++){
if(Character.isDigit(s.charAt(i))){
fre = fre * 10 + (s.charAt(i) - '0');
}else if(s.charAt(i) == '['){
shuziDeque.push(fre);
zimuDeque.push(res);
fre = 0;
res = "";
}else if(s.charAt(i) == ']'){
int tem = shuziDeque.pop();
String temLetter = "";
temLetter = zimuDeque.pop();
for(int j = 0; j < tem; j++) temLetter += res;
res = temLetter;
}else{
res += s.charAt(i);
}
}
return res;
}
}