給定一組字元,使用原地演算法將其壓縮。
壓縮後的長度必須始終小於或等於原陣列長度。
陣列的每個元素應該是長度為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]
區間內。
思路:所有相同的字元都是連續的,如果相同的字元,沒有連續,則分開計數。在輸出個數的同時,得改變輸入的變數內容。所以,直接改變原來變數的內容,然後輸出新變數的長度,即為結果。
定義乙個臨時陣列,掃瞄原陣列,相同的話,記錄個數,以及首字元,首字元push進臨時陣列,小於10,且大於1 的,直接把個數放入,大於等於10的,就需要對int型,先轉成字串,然後把字串倒序push進臨時陣列,最後把原陣列清空,用新陣列複製,返回結果。
class solution
if(count > 1 && count < 10)
else if(count >= 10)
for(int j = str.size()-1; j >= 0; --j)}}
chars.clear();
chars.assign(res.begin(), res.end());
return chars.size();}};
LeetCode 443 壓縮字串
給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度。高階 你能否僅使用o 1 空間解決問題?示例 1 輸入 a a b b c c c 輸出 返回6,輸入陣列的前6個...
leetcode 443 壓縮字串
題目描述 給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度。高階 你能否僅使用o 1 空間解決問題?示例 1 輸入 a a b b c c c 輸出 返回6,輸入陣...
LeetCode 443 壓縮字串
題目描述 給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度。高階 你能否僅使用o 1 空間解決問題?輸入示例1 輸入 a a b b c c c 輸出 返回6,輸入...