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