• 【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 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.

    解题思路:从头到尾遍历数组,记录连续字符的个数,然后插入数组前部,注意每次插入要记录当前的偏移量offset 。

    代码如下:

    class Solution(object):
        def compress(self, chars):
            """
            :type chars: List[str]
            :rtype: int
            """
            lastChar = None
            count = 0
            inx = 0
            offset = 0
            chars.append('END') # terminator
            while inx < len(chars):
                i = chars[inx]
                if lastChar == None:
                    lastChar = i
                    count = 1
                elif lastChar == i:
                    count += 1
                else:
                    lastOff = offset
                    chars.insert(offset,lastChar)
                    offset += 1
                    if count != 1:
                        count = str(count)
                        for j in count:
                            chars.insert(offset, j)
                            offset += 1
                    lastChar = i
                    count = 1
                    inx += (offset - lastOff)
                inx += 1
            #print chars
            del chars[-1]
            return offset
  • 相关阅读:
    dojo自定义Widget
    奇怪的JS
    Dojo Widget系统(转)
    JS 中Promise 模式
    Structs 原理图
    ArcGIS Engine Style文件操作
    dojo.hitch 原理
    Android:解决cannot find zipalign的问题
    Bootstrap:解决Bootstrap下拉框需要双击才能打开的问题
    Clojure:添加gzip功能
  • 原文地址:https://www.cnblogs.com/seyjs/p/9275563.html
Copyright © 2020-2023  润新知