LeetCode 443. 壓縮字符串

題目

給定一組字符,使用原地算法將其壓縮。

壓縮後的長度必須始終小於或等於原數組長度。

數組的每個元素應該是長度爲1 的字符(不是 int 整數類型)。

在完成原地修改輸入數組後,返回數組的新長度。

進階:
你能否僅使用O(1) 空間解決問題?

前言

此題要求使用原地算法求解,即將壓縮結果存在原chars[]數組中.

使用雙指針即可求解此題.這裏我們稱由相同字符組成的字符串爲相同字符序列.

指針t指示已壓縮的結果的末尾,指針i指示未壓縮字符串的開頭.

遇到相同的字符,指針i便向後滑動,直到遇到不同字符.指針i滑動的距離即爲相同字符序列的長度.

具體過程及解析如下:

public int compress(char[] chars) {
        int t=0;//設置指針
        int i=0;
        while (i <chars.length && t<chars.length) {//遍歷字符串
            chars[t++]=chars[i];//取相同字符序列的首字符存下
            int temp=i;//記錄相同字符序列首元素位置
            while (i<chars.length &&chars[i]==chars[t-1])
                i++;//i指針滑動到相同字符序列末尾的下一個位置
            if(i-temp>1){//若相同字符序列長度大於1
                for(char c:String.valueOf(i-temp).toCharArray()){//向結果中加入相同字符序列的長度的字符形式
                    chars[t++]=c;
                }
            }
        }
        return t;//t即爲已壓縮的結果的長度
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章