LeetCode75——Day9

文章目录

一、题目

443. String Compression

Given an array of characters chars, compress it using the following algorithm:

Begin with an empty string s. For each group of consecutive repeating characters in chars:

If the group's length is 1, append the character to s.

Otherwise, append the character followed by the group's length.

The compressed string s should not be returned separately, but instead, be stored in the input character array chars. Note that group lengths that are 10 or longer will be split into multiple characters in chars.

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

You must write an algorithm that uses only constant extra space.

Example 1:

Input: chars = ["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: The groups are "aa", "bb", and "ccc". This compresses to "a2b2c3".

Example 2:

Input: chars = ["a"]

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

Explanation: The only group is "a", which remains uncompressed since it's a single character.

Example 3:

Input: chars = ["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: The groups are "a" and "bbbbbbbbbbbb". This compresses to "ab12".

Constraints:

1 <= chars.length <= 2000

chars[i] is a lowercase English letter, uppercase English letter, digit, or symbol.

二、题解

O(n)时间复杂度,O(1)空间复杂度的实现,和题解略有区别

cpp 复制代码
class Solution {
public:
    int compress(vector<char>& chars) {
        int n = chars.size();
        int index = 0, fast = 0;
        while(fast < n){
            char curChar = chars[fast];
            int curIndex = fast;
            while(fast < n && chars[fast] == curChar) fast++;
            int gap = fast - curIndex;
            if(gap == 1) chars[index++] = chars[curIndex];
            else{
                chars[index++] = chars[curIndex];
                string tmp = to_string(gap);
                for(int i = 0;i < tmp.length();i++) chars[index + i] = tmp[i];
                index += tmp.length();
            }
        }
        return index;
    }
};
相关推荐
csdnzzt3 分钟前
从内存角度透视现代C++关键特性
c++
jie1889457586630 分钟前
C++ 中的 const 知识点详解,c++和c语言区别
java·c语言·c++
明月*清风36 分钟前
c++ —— 内存管理
开发语言·c++
WindSearcher1 小时前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】1 小时前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
西北大程序猿1 小时前
单例模式与锁(死锁)
linux·开发语言·c++·单例模式
qq_454175792 小时前
c++学习-this指针
开发语言·c++·学习
Magnum Lehar2 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
水蓝烟雨3 小时前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选
超闻逸事3 小时前
【题解】[UTPC2024] C.Card Deck
c++·算法