1. class Solution {
    2. private:
    3. inline int digital_length(int a) {
    4. int count = 0;
    5. while (a > 0) {
    6. ++count;
    7. a /= 10;
    8. }
    9. return count;
    10. }
    11. inline int put_num(vector<char> &chars, int start, int num) {
    12. int len = digital_length(num);
    13. for (int i = 1; i <= len; ++i) {
    14. chars[start + len - i] = '0' + (num % 10);
    15. num /= 10;
    16. }
    17. return len;
    18. }
    19. public:
    20. int compress(vector<char> &chars) {
    21. char pre;
    22. int count;
    23. int ans = 0;
    24. pre = chars[0];
    25. count = 1;
    26. int i, j;
    27. for (i = 1, j = 0; i < chars.size(); ++i) {
    28. if (chars[i] == pre)
    29. ++count;
    30. else {
    31. chars[j++] = pre;
    32. ans += 1;
    33. if (count > 1) {
    34. int len = put_num(chars, j, count);
    35. j += len;
    36. ans += len;
    37. }
    38. count = 1;
    39. pre = chars[i];
    40. }
    41. }
    42. chars[j++] = pre;
    43. ans += 1;
    44. if (count > 1) {
    45. int len = put_num(chars, j, count);
    46. ans += len;
    47. }
    48. return ans;
    49. }
    50. };