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

    题目

    给定一组字符,使用原地算法将其压缩。

    压缩后的长度必须始终小于或等于原数组长度。

    数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。

    在完成原地修改输入数组后,返回数组的新长度。

    解题思路

    方法一:双指针
    直觉:

    我们使用两个指针 read 和 write 分别标记读和写的位置。读写操作均从左到右进行:读入连续的一串字符,然后将压缩版写到数组中。最终,write 将指向输出答案的结尾。

    算法:

    保留指针 anchor,指向当前读到连续字符串的起始位置。

    从左到右进行读取。当读到最后一个字符,或者下一个下一个字符与当前不同时,则到达连续区块的结尾。

    当我们到达连续区块的结尾时,就从 write 写入压缩的结果。chars[anchor] 为字符,read - anchor + 1 (若大于 1)为长度。

    代码

    func compress(chars []byte) int {
    	w, anchor := 0, 0
    	for r := 0; r < len(chars); r++ {
    		if r+1 == len(chars) || chars[r+1] != chars[r] {
    			chars[w] = chars[anchor]
    			w++
    			if r > anchor {
    				num := strconv.Itoa(r + 1 - anchor)
    				for _, val := range num {
    					chars[w] = byte(val)
    					w++
    				}
    			}
    			anchor = r + 1
    		}
    	}
    	return w
    }
    

      

    small_lei_it 技术无止境,追求更高。
  • 相关阅读:
    最大的错误就是没有把自己的软件开发事业当 作一桩生意来看待
    python:open/文件操作
    Python 之ConfigParser
    Python 之ConfigParser
    Python 之ConfigParser
    python的time模块使用
    python的time模块使用
    python的time模块使用
    国外、国内各大OJ
    国外、国内各大OJ
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14512632.html
Copyright © 2011-2022 走看看