zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    PID入门的十五个基本概念
    串级调节系统参数整定方法(串级调节器参数整定)
    PID参数整定快速入门(调节器参数整定方法)
    在 Altium designer 09 中显示隐藏飞线
    如何高效利用GitHub
    基于markdown的blog系统调研1:typecho
    使用GitBook, Git github, Markdown 快速发布你的书籍
    献给写作者的 Markdown 新手指南及语法
    ubuntu搭建Git服务器
    CentOS搭建git服务器实测
  • 原文地址:https://www.cnblogs.com/immjc/p/7762602.html
Copyright © 2011-2022 走看看