443. String Compression 字符串压缩

Given an array of characters, compress it in-place.

The length after compression must always be smaller than or equal to the original array.

Every element of the array should be a character (not int) of length 1.

After you are done modifying the input array in-place, return the new length of the array.

Follow up:
Could you solve it using only O(1) extra space?

Example 1:

Input:
["a","a","b","b","c","c","c"]

Output:
Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"]

Explanation:
"aa" is replaced by "a2". "bb" is replaced by "b2". "ccc" is replaced by "c3".

Example 2:

Input:
["a"]

Output:
Return 1, and the first 1 characters of the input array should be: ["a"]

Explanation:
Nothing is replaced.

Example 3:

Input:
["a","b","b","b","b","b","b","b","b","b","b","b","b"]

Output:
Return 4, and the first 4 characters of the input array should be: ["a","b","1","2"].

Explanation:
Since the character "a" does not repeat, it is not compressed. "bbbbbbbbbbbb" is replaced by "b12".
Notice each digit has it‘s own entry in the array.

Note:

  1. All characters have an ASCII value in [35, 126].
  2. 1 <= len(chars) <= 1000.

给定一组字符,将其压缩到原位。 压缩后的长度必须始终小于或等于原始数组。 数组的每个元素应该是长度为1的字符(不是int)。

修改输入数组后,返回数组的新长度。

  1. /**
  2. * @param {character[]} chars
  3. * @return {number}
  4. */
  5. var compress = function(chars) {
  6. if(!chars){
  7. return 0
  8. }
  9. if(chars.length <= 1){
  10. return chars.length;
  11. }
  12. let res = "";
  13. let count = chars.length - 1;
  14. let lastChar = chars[0];
  15. let repeat = 0;
  16. for(let i = 1; i <= count; i++){
  17. let curChar = chars[i];
  18. if(curChar == lastChar){
  19. repeat++;
  20. }
  21. if(curChar != lastChar || i == count){
  22. repeat <= 0 ? (res += lastChar) : (res += lastChar + String(repeat+1));
  23. repeat = 0;
  24. lastChar = curChar;
  25. }
  26. }
  27. if(chars[chars.length-1] != chars[chars.length-2]){
  28. res+=chars[chars.length-1];
  29. }
  30. res = res.split("");
  31. for(let i in res){
  32. chars[i] = res[i];
  33. }
  34. chars.length = res.length;
  35. return res.length;
  36. };

来自为知笔记(Wiz)

时间: 2024-10-17 07:26:36

443. String Compression 字符串压缩的相关文章

443. String Compression - LeetCode

Question 443.?String Compression Solution 题目大意:把一个有序数组压缩, 思路:遍历数组 Java实现: public int compress(char[] chars) { if (chars.length == 0) return 0; StringBuilder sb = new StringBuilder(); char cur = chars[0]; int sum = 1; for (int i = 1; i <= chars.length

443 String Compression 压缩字符串

给定一组字符,使用原地算法将其压缩.压缩后的长度必须始终小于或等于原数组长度.数组的每个元素应该是长度为1 的字符(不是 int 整数类型).在完成原地修改输入数组后,返回数组的新长度.进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a"

443. String Compression

问题描述: Given an array of characters, compress it in-place. The length after compression must always be smaller than or equal to the original array. Every element of the array should be a character (not int) of length 1. After you are done modifying th

【leetcode】443. String Compression

题目如下: Given an array of characters, compress it in-place. The length after compression must always be smaller than or equal to the original array. Every element of the array should be a character (not int) of length 1. After you are done modifying th

Leetcode 443 String Compression

基础的字符串操作,用两个指针扫一遍就行. class Solution(object): def compress(self,chars): """ :type chars: List[str] :rtype: int """ if not chars: return 0 if len(chars) == 1: return 1 left, right, num = 0, 1, 1 while right <= len(chars): if

[LC] 443. String Compression

Given an array of characters, compress it in-place. The length after compression must always be smaller than or equal to the original array. Every element of the array should be a character (not int) of length 1. After you are done modifying the inpu

POJ-2406(KMP+字符串压缩)

Power String POJ-2406 字符串压缩模板题,但是是求有多少个这样最短的子串可以组成s. #include<iostream> #include<cstring> #include<cstdio> #include<string> #include<algorithm> using namespace std; const int N=10000001; int pi[N]; void Pi(string s){ memset(p

LeetCode_443. String Compression

443. String Compression Easy Given an array of characters, compress it in-place. The length after compression must always be smaller than or equal to the original array. Every element of the array should be a character (not int) of length 1. After yo

codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

/** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: dp[i]表示前i个字符需要的最小次数. dp[i] = min(dp[j]+w(j+1,i)); (0<=j<i); [j+1,i]如果存在循环节(自身不算),那么取最小的循环节x.w = digit((i-j)/x)+x; 否则w = i-j+1; 求一个区间最小循环节: 证明:http://w