給定一組字符,使用原地算法將其壓縮。java
壓縮後的長度必須始終小於或等於原數組長度。算法
數組的每一個元素應該是長度爲1 的字符(不是 int 整數類型)。數組
在完成原地修改輸入數組後,返回數組的新長度。ide
進階:
你可否僅使用O(1) 空間解決問題?spa
示例 1:code
輸入:字符串
["a","a","b","b","c","c","c"]
輸出:
返回6,輸入數組的前6個字符應該是:[「a」,「2」,「b」,「2」,「c」,「3」]it
說明:
"aa"被"a2"替代。"bb"被"b2"替代。"ccc"被"c3"替代。
示例 2:io
輸入:
[「a」]class
輸出:
返回1,輸入數組的前1個字符應該是:[「a」]
說明:
沒有任何字符串被替代。
示例 3:
輸入:
["a","b","b","b","b","b","b","b","b","b","b","b","b"]
輸出:
返回4,輸入數組的前4個字符應該是:[「a」,「b」,「1」,「2」]。
說明:
因爲字符"a"不重複,因此不會被壓縮。"bbbbbbbbbbbb"被「b12」替代。
注意每一個數字在數組中都有它本身的位置。
注意:
全部字符都有一個ASCII值在[35, 126]區間內。
1 <= len(chars) <= 1000。
class Solution { public int compress(char[] chars) { if (chars.length == 0) return 0; char temp = chars[0]; int index = 0; int count = 1; for (int i = 1; i < chars.length; i++) { if (chars[i] != temp) { chars[index++] = temp; temp = chars[i]; if (count > 1) { for (char c : Integer.toString(count).toCharArray()) { chars[index++] = c; } } count = 1; continue; } count++; } chars[index++] = chars[chars.length - 1]; if (count > 1) { for (char c : Integer.toString(count).toCharArray()) { chars[index++] = c; } } return index; } }