(G) Decode String
匆忙写的,有点丑。。之后要优化下。
步骤上不麻烦,遇到嵌套的括号,就把原始 String 变成更小的子问题,递归处理就好了。于是这题操作上总共就三件事:
一边扫一边记录当前数字,times 初始化 = 0;
括号之间就是一个新的子问题,递归处理之后把结果用循环添加就好了。
public String decodeString(String s) {
if(s == null || s.length() == 0) return "";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++){
char chr = s.charAt(i);
if(Character.isDigit(chr)){
int times = 0;
while(i < s.length() && s.charAt(i) != '['){
times = times * 10 + (s.charAt(i) - '0');
i ++;
}
int matchIndex = findMatchIndex(s, i);
String repeat = decodeString(s.substring(i + 1, matchIndex));
for(int time = 0; time < times; time++){
sb.append(repeat);
}
i = matchIndex;
} else {
sb.append(chr);
}
}
return sb.toString();
}
private int findMatchIndex(String s, int index){
int count = 0;
for(; index < s.length(); index++){
if(s.charAt(index) == '[') count ++;
else if(s.charAt(index) == ']') count --;
if(count == 0) break;
}
return index;
}