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.
Example
s = abc3[a]
return abcaaa
s = 3[abc]
return abcabcabc
s = 4[ac]dy
, return acacacacdy
一个必须要是用stack来处理的问题
java
public class Solution {
/*
* @param s: an expression includes numbers, letters and brackets
* @return: a string
*/
public String expressionExpand(String s) {
// write your code here
if (s == null || s.length() == 0) {
return "";
}
Stack<Object> stack = new Stack<>();
int num = 0;
for (int i = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
stack.push(s.charAt(i) + "");
} else if (Character.isDigit(s.charAt(i))) {
num = num * 10 + s.charAt(i) - '0';
} else if (s.charAt(i) == '[') {
stack.push(num);
num = 0;
} else if (s.charAt(i) == ']') {
transfer(stack);
}
}
StringBuffer sb = new StringBuffer();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.reverse().toString();
}
private void transfer(Stack<Object> stack) {
StringBuffer sb = new StringBuffer();
int num = 0;
while (!stack.isEmpty()) {
Object obj = stack.pop();
if (obj instanceof String) {
sb.append((String)obj);
} else {
num = (int)obj;
break;
}
}
sb = sb.reverse();
for (int i = 0; i < num; i++) {
for (int j = 0; j < sb.length(); j++) {
stack.push(sb.charAt(j) + "");
}
}
}
}