zoukankan      html  css  js  c++  java
  • 443 String Compression 压缩字符串

    给定一组字符,使用原地算法将其压缩。
    压缩后的长度必须始终小于或等于原数组长度。
    数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。
    在完成原地修改输入数组后,返回数组的新长度。
    进阶:
    你能否仅使用O(1) 空间解决问题?
    示例 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。
    详见:https://leetcode.com/problems/string-compression/description/
    C++:

    class Solution {
    public:
        int compress(vector<char>& chars) {
            int n = chars.size(), cur = 0;
            for (int i = 0, j = 0; i < n; i = j) 
            {
                while (j < n && chars[j] == chars[i])
                {
                    ++j;
                }
                chars[cur++] = chars[i];
                if (j - i == 1)
                {
                    continue;
                }
                for (char c : to_string(j - i))
                {
                    chars[cur++] = c;
                }
            }
            return cur;
        }
    };
    

     参考:https://www.cnblogs.com/grandyang/p/8742564.html

  • 相关阅读:
    解析ASP.NET WebForm和Mvc开发的区别
    relink:在Linux/UNIX平台上relink Oracle软件(转)
    Java开发 Eclipse使用技巧(转)
    职场人生:情商
    RPC
    PLSQL Developer Debug
    uC/OS-III学习2::uC/OS-III LED闪烁实验
    Flex文件读取报错
    C++字节对齐问题
    写可測试的代码
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8900547.html
Copyright © 2011-2022 走看看