• 443. String Compression


    package LeetCode_443
    
    /**
     * 443. String Compression
     * https://leetcode.com/problems/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.
    
    Follow up:
    Could you solve it using only O(1) 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. 1 <= chars.length <= 2000
    2. chars[i] is a lower-case English letter, upper-case English letter, digit, or symbol.
     * */
    class Solution {
        /*
        * solution: scan array to counting number of char, Time:O(n), Space:O(1)
        * */
        fun compress(chars: CharArray): Int {
            var count = 1
            var index = 0
            val n = chars.size
            var i = 0
            while (i < n) {
                //check if current char equals next one,if yes, increasing i and count
                while (i < n - 1 && chars[i] == chars[i + 1]) {
                    count++
                    i++
                }
                if (count == 1) {
                    //count==1, just replace char
                    chars[index++] = chars[i]
                } else {
                    //count>1, replace char and count
                    chars[index++] = chars[i]
                    //handle the number
                    val countStr = count.toString()
                    for (k in countStr.indices) {
                        chars[index++] = countStr[k]
                    }
                }
                i++
                //reset count
                count = 1
            }
            return index
        }
    }
  • 相关阅读:
    Java生成二维码连接
    Spring boot 整合 Elasticsearch
    Windows下安装ElasticSearch
    springcloud zookeeper+gateway
    idea中Springcloud同时运行多个模块、微服务
    【转】为什么我的DIV块前总有空隙?
    【转载】通过JSFL让Flash Professional CS4或CS5拥有批量FLA导出SVG的功能
    jQuery Mobile中的页面加载与跳转机制
    关于Conversion to Dalvik format failed with error 1错误
    带权重的随机输出数组中的元素
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/14279239.html
Copyright © 2020-2023  润新知