给出一个表达式 s,此表达式包括数字,字母以及方括号。在方括号前的数字表示方括号内容的重复次数(括号内的内容可以是字符串或另一个表达式),请将这个表达式展开成一个字符串。
用栈来存储信息 当遇到’]'时 进行出栈运算处理并将结果入栈
public class Solution {
/**
* @param s: an expression includes numbers, letters and brackets
* @return: a string
*/
public String expressionExpand(String s) {
Deque<Object> stack = new LinkedList<>();
StringBuilder sb = new StringBuilder();
int number = 0;
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(Character.isDigit(ch)){
// stack.push(Integer.valueOf(ch));
number = number * 10 + ch - '0';
}
else if(ch == ']'){
String newStr = popStack(stack);
Integer count = (Integer)stack.pop();
for(int j = 0; j < count; j++){
stack.push(newStr);
}
}
else if(ch == '['){
stack.push(Integer.valueOf(number));
number = 0;
}
else{
stack.push(String.valueOf(ch));
}
}
return popStack(stack);
}
public String popStack(Deque<Object> stack){
Deque<String> buffer = new LinkedList<>();
while(!stack.isEmpty() && (stack.peek() instanceof String)){
buffer.push((String)stack.pop());
}
StringBuilder sb = new StringBuilder();
while(!buffer.isEmpty()){
sb.append(buffer.pop());
}
return sb.toString();
}
}