leetcode 443 字串壓縮

2021-09-20 06:31:14 字數 1477 閱讀 4819

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

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

陣列的每個元素應該是長度為1 的字元(不是 int 整數型別)。

在完成原地修改輸入陣列後,返回陣列的新長度

示例 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,那麼就直接返回不做修改),**如下:

/*

字串壓縮

*/#include #include #include #include #include using namespace std;

/*字串壓縮演算法

*/int compress(vector& chars)

//雙指標法

int i = 0;//慢指標

int j = 0;//快指標

int count = 0;

doelse

chars[++i] = chars[j];//慢指標後移一位,賦值為當前快指標掃到的新的字元

count = 1;//count要重置

} }while(++j& chars,int &i,int &j) }}

/*解壓縮演算法

*/void upzip(vector&chars,int index,int size)else

//每當還原一遍後,都要重置

times = 1;

count = 0;

} --cur; }}

int main(int argc, char const *ar**)

; std::vectorchars(arr,arr+capacity);

cout<

可待優化,記憶體還是用的太多。

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,輸入...