【LeetCode 簡單題】100-壓縮字串
阿新 • • 發佈:2018-11-19
宣告:
今天是第100道題。給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元(不是 int 整數型別)。在完成原地修改輸入陣列後,返回陣列的新長度。
進階:
你能否僅使用O(1) 空間解決問題?
示例 1:
輸入: ["a","a","b","b","c","c","c"] 輸出: 返回6,輸入陣列的前6個字元應該是:["a","2","b","2","c","3"] 說明: "aa"被"a2"替代。"bb"被"b2"替代。"ccc"被"c3"替代。
示例 2:
輸入: ["a"] 輸出: 返回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
。
解法1。用cur指標指向當前chars需要插入的字元或數字的index,然後遍歷chars,原地修改,程式碼如下。
執行用時: 56 ms, 在String Compression的Python提交中擊敗了94.44% 的使用者
class Solution(object): def compress(self, chars): """ :type chars: List[str] :rtype: int """ i = 0 chars_len = len(chars) cur = 0 while i < chars_len: j = i while j < chars_len - 1 and chars[j] == chars[j+1]: j += 1 chars[cur] = chars[i] cur += 1 if i != j: times = str(j-i+1) times_len = len(times) for k in range(times_len): chars[cur+k] = times[k] cur += times_len i = j+1 return cur #
結尾
解法1:https://blog.csdn.net/androidchanhao/article/details/81408345