String compression


Question

Given a string "aaabbbcc", compress it, = "a3b3c2" . Given that output string's length is always smaller than input string, you have do it inplace. No extra space

Solution

我覺得這題難是難在要 in-place 解,如果不需要 in-place,用 stringbuilder 做應該不會太難。in-place 要掌握的概念是,一邊遍歷一邊將 string 縮短並且 compress。需要注意的是,如果是 ab 這種情況,不需要變成 a1b1,因為這樣根本沒有縮短 string

public static String cstr(String s) {
    if (a.length() < 2) {
        return a;
    }

    if (a.length() == 2) {
        if (a.charAt(0) == a.charAt(1)) {
            return a.charAt(0) + "2";
        } else {
            return a;
        }
    }

    for (int i = 0; i < s.length(); i++) {
        int c = i + 1;
        while (c < a.length() && a.charAt(c) == a.charAt(i)) {
            c++;
        }

        if (c - i != 1) {
            a = a.substring(0, i + 1) + (c - i) + s.substring(c);
            i++;
        }
    }

    return a;
}

results matching ""

    No results matching ""