思路
思路一:使用栈
这种括号或者括号套括号的模式非常适合用栈来解决,
设定一个辅助栈,当遇到’[‘的时候,开始将所有东西推到
栈中,直到遇到’]‘时,开始取栈中的东西。
取得方法:先取字符,再取数字,计算得到到的东西再压入栈中
直到所有’]'都遍历完为止
注意点:从栈中取的顺序和最终生成结果得顺序应该一致
代码
class Solution {
public String decodeString(String s) {
Stack<String> stack = new Stack<>();
int i = 0;
// while(i<s.length()){
// StringBuffer tmp = new StringBuffer();
// if(Character.isLetter(s.charAt(i))){
// tmp.append(s.charAt(i));
// i++;
// continue;
// }
// stack.push(tmp.toString());
// break;
// }
while(i<s.length()){
//存字符串
if(Character.isLetter(s.charAt(i))){
StringBuffer tmp = new StringBuffer();
while(i<s.length()&&Character.isLetter(s.charAt(i))){
tmp.append(s.charAt(i));
i++;
}
stack.push(tmp.toString());
}
//存数字
else if(Character.isDigit(s.charAt(i))){
int num = 0;
while(i<s.length()&&Character.isDigit(s.charAt(i))){
num = num*10+(int) s.charAt(i) - (int)'0';
i++;
}
stack.push(String.valueOf(num));
}
//存'['
else if(s.charAt(i)=='['){
stack.push(String.valueOf(s.charAt(i)));
i++;
}
//开始处理
else if(s.charAt(i)==']'){
//得到字符串
String top = "";
while(stack.peek().equals("[")==false){
top=stack.pop()+top;
}
//除去'['
stack.pop();
//得到数字
String num = stack.pop();
int n = Integer.valueOf(num);
//制造字符串
StringBuffer tmp = new StringBuffer();
while(n-->0){
tmp.append(top);
}
stack.push(tmp.toString());
//测试
//System.out.println(stack.peek());
i++;
}
}
StringBuffer result = new StringBuffer();
while(stack.isEmpty()==false){
result.insert(0,stack.pop());
}
return result.toString();
}
}