• [LeetCode] 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位数,则由多个1位数字表示。

    思路:首先顺序统计出现每个单词出现的次数,用一个变量cur作为新修改数组的索引,指向当前被修改的字符。然后利用ostringstream字符串流来逐位输入字符出现的次数。最后返回修改的字符个数cur即可。

    class Solution {
    public:
        int compress(vector<char>& chars) {
            int cur = 0;
            for (int i = 1, cnt = 1; i <= chars.size(); i++) {
                if (i != chars.size() && chars[i] == chars[i - 1]) {
                    cnt++;
                }
                else {
                    chars[cur++] = chars[i - 1];
                    if (cnt != 1) {
                        ostringstream ss;
                        ss << cnt;
                        for (auto& c : ss.str()) {
                            chars[cur++] = c;
                        }
                    }
                    cnt = 1;
                }
            }
            return cur;
        }
    };
    // 9 ms
  • 相关阅读:
    面试问题记录-C++
    面试问题记录-网络
    二叉树
    75. Sort Colors 荷兰国旗问题
    桶排序
    数据结构-堆
    快速排序
    第六章 数据库原理
    第五章 Java Web
    第四章 java基础知识
  • 原文地址:https://www.cnblogs.com/immjc/p/7762602.html
Copyright © 2020-2023  润新知