Given an expression s
includes numbers, letters and brackets. Number represents the number of repetitions inside the brackets(can be a string or another expression).Please expand expression to be a string.
样例
s = abc3[a]
return abcaaa
s = 3[abc]
return abcabcabc
s = 4[ac]dy
, return acacacacdy
s = 3[2[ad]3[pf]]xyz
, return adadpfpfpfadadpfpfpfadadpfpfpfxyz
public class Solution {
/**
* @param s an expression includes numbers, letters and brackets
* @return a string
*/
public String expressionExpand(String s) {
String res = "";
int n = s.length();
//Stack<Integer> stackNum = new Stack<Integer>();
Stack<String> stack = new Stack<String>();
int i=0;
while(i<n){
char t = s.charAt(i);
if(t<'0' || t>'9'){
res+=String.valueOf(t);
i++;
}else{
String tmp="";
while(true){
//遇到第一个]前的字符串入栈
while(s.charAt(i)!=']'){
stack.add(String.valueOf(s.charAt(i)));
i++;
}
i++;//]的下一个字符
//遇到第一个]
//弹出[]间的字符串
String sInside = "";
while(stack.peek().charAt(0)!='['){
sInside=stack.pop()+sInside;
}
stack.pop();//弹出'['
//获得[]前的数字
String sNum = "";
while(!stack.isEmpty() && stack.peek().charAt(0)>='0' && stack.peek().charAt(0)<='9'){
sNum = stack.pop()+sNum;
}
int num = Integer.valueOf(sNum);
//计算重复字符串
tmp = repeat(sInside, num);
if(stack.isEmpty())
break;
else {
if(num!=0)//容易忽略,num为0时,tmp="",不能入栈
stack.add(tmp);
}
}
res+=tmp;
}
}
return res;
}
String repeat(String s, int num){
String res="";
while(num>0){
res+=s;
num--;
}
return res;
}
}