Java實現 LeetCode 443 壓縮字符串

443. 壓縮字符串

給定一組字符,使用原地算法將其壓縮。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;
    }
}
相關文章
相關標籤/搜索