Given an expressionsincludes 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.

Have you met this question in a real interview?

Yes

Example

s =abc3[a]returnabcaaa
s =3[abc]returnabcabcabc
s =4[ac]dy, returnacacacacdy
s =3[2[ad]3[pf]]xyz, returnadadpfpfpfadadpfpfpfadadpfpfpfxyz

根据扫描到的字符决定是否放入栈,或者计算重复次数。用栈做dfs

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 s;
        }

        Stack<Object> stack = new Stack<Object>();
        char[] sArray = s.toCharArray();
        int number = 0;
        for (Character c : sArray) {
            if (c == '[') {
                stack.push(number);
                number = 0;
            } else if (Character.isDigit(c)) {
                number = number * 10 + c - '0';
            } else if (c == ']') {
                String temp = popStack(stack);
                int curNum = (int) stack.pop();
                String finalS = "";
                for (int i = 0; i < curNum; i++) {
                    finalS += temp;
                }
                stack.push(finalS);
            } else {
                stack.push(String.valueOf(c));
            }
        }
        return popStack(stack);
    }

    public String popStack(Stack<Object> stack) {
        String ans = "";
        while (!stack.isEmpty() && stack.peek() instanceof String) {
            ans = stack.pop() + ans;
        }
        return ans;
    }
}

results matching ""

    No results matching ""