//采用递归和字符串替换的解法
public class Solution {
public String decodeString (String s) {
int length = s.length();
//对特殊情况进行处理,只要包含有[字符就要递归下去
if(length==3||!s.contains("[")){
return s;
}
//存放要被替换的字符串
Stack<StringBuilder> tempStack = new Stack<>();
StringBuilder tempString;
//存放替换的字符串
Stack<StringBuilder> resultStack = new Stack<>();
//定义替换的字符串
StringBuilder resultString;
//定义重复的次数
int time;
for (int i = 0; i < length-3; i++) {
//判断
if(Character.isDigit(s.charAt(i))&&s.charAt(i+1)=='['&&Character.isLetter(s.charAt(i+2))){
//获取重复的次数
time=s.charAt(i);
tempString = new StringBuilder();
resultString = new StringBuilder();
tempString.append(s, i, i+2);
int j = i+2;
while (Character.isLetter(s.charAt(j))){
tempString.append(s.charAt(j));
resultString.append(s.charAt(j));
j++;
}
tempString.append(']');
tempStack.add(tempString);
String temp = resultString.toString();
StringBuilder result = new StringBuilder();
for (int k = 0; k < time-48; k++) {
result.append(temp);
}
resultStack.add(result);
}
}
//进行替换
Iterator<StringBuilder> tempIterator = tempStack.iterator();
Iterator<StringBuilder> resultIterator = resultStack.iterator();
while (tempIterator.hasNext()) {
s=s.replace(tempIterator.next(), resultIterator.next());
}
//递归替换
return decodeString(s);
}
}