# leetcode443. String Compression

## 题目要求

```Given an array of characters, compress it in-place.

The length after compression must always be smaller than or equal to the original array.

Every element of the array should be a character (not int) of length 1.

After you are done modifying the input array in-place, return the new length of the array.

Could you solve it using only O(1) extra space?

Example 1:

Input:
["a","a","b","b","c","c","c"]

Output:
Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"]

Explanation:
"aa" is replaced by "a2". "bb" is replaced by "b2". "ccc" is replaced by "c3".

Example 2:

Input:
["a"]

Output:
Return 1, and the first 1 characters of the input array should be: ["a"]

Explanation:
Nothing is replaced.

Example 3:

Input:
["a","b","b","b","b","b","b","b","b","b","b","b","b"]

Output:
Return 4, and the first 4 characters of the input array should be: ["a","b","1","2"].

Explanation:
Since the character "a" does not repeat, it is not compressed. "bbbbbbbbbbbb" is replaced by "b12".
Notice each digit has it's own entry in the array.

Note:

All characters have an ASCII value in [35, 126].
1 <= len(chars) <= 1000.```

## 思路和代码

```    public int compress(char[] chars) {
int p1 = 0;
int p2 = 0;
int p3 = 1;
while(p2 < chars.length) {
if(p3 >= chars.length || chars[p3] != chars[p2]) {
int length = p3 - p2;
chars[p1++] = chars[p2];
if(length != 1) {
int count = 0;
while(length != 0) {
int num = length % 10;
for(int i = p1+count ; i>p1 ; i--) {
chars[i] = chars[i-1];
}
chars[p1] = (char)('0' + num);
length /= 10;
count++;
}
p1 += count;
}
p2 = p3;
}
p3++;

}
return p1;
}```

0 条评论

• ### leetcode516. Longest Palindromic Subsequence

Given a string s, find the longest palindromic subsequence's length in s. You ma...

• ### leetcode 343. Integer Break

这里应用了一个数学的思路。假设我们有一个数字n，该数组可以随机分解为t和n-t。当分解为n/2时可以获得最大的乘积。因此t取n/2时可以得到最好的结果。但是这里...

• ### leetcode363. Max Sum of Rectangle No Larger Than K

现有一个由整数构成的矩阵，问从中找到一个子矩阵，要求该子矩阵中各个元素的和为不超过k的最大值，问子矩阵中元素的和为多少? 注：后面的文章中将使用[左上角顶点坐标...

• ### 百炼OJ 2972 2973

一、2972相邻数字的基数等比：确定进制      所谓基数等比就是后一个数与前一个数有倍数的关系。如 111 = 1 + 1 * 2（1 + 2 * 1）； ...

• ### 资源 | TensorFlow极简教程：创建、保存和恢复机器学习模型

选自Github 机器之心编译 参与：Jane W、李泽南 TensorFlow 是一个由谷歌发布的机器学习框架，在这篇文章中，我们将阐述 TensorFlow...

• ### AtCoder Beginner Contest 069【A，水，B，水，C，数学，D，暴力】

A - K-City ---- Time limit : 2sec / Memory limit : 256MB Score : 100 points Prob...

### 活动推荐 