class Solution {private: inline int digital_length(int a) { int count = 0; while (a > 0) { ++count; a /= 10; } return count; } inline int put_num(vector<char> &chars, int start, int num) { int len = digital_length(num); for (int i = 1; i <= len; ++i) { chars[start + len - i] = '0' + (num % 10); num /= 10; } return len; }public: int compress(vector<char> &chars) { char pre; int count; int ans = 0; pre = chars[0]; count = 1; int i, j; for (i = 1, j = 0; i < chars.size(); ++i) { if (chars[i] == pre) ++count; else { chars[j++] = pre; ans += 1; if (count > 1) { int len = put_num(chars, j, count); j += len; ans += len; } count = 1; pre = chars[i]; } } chars[j++] = pre; ans += 1; if (count > 1) { int len = put_num(chars, j, count); ans += len; } return ans; }};