zoukankan      html  css  js  c++  java
  • [ 力扣活动0316 ] 面试题 01.06. 字符串压缩

    <>

    题目描述


    字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

    示例1:

     输入:"aabcccccaaa"
     输出:"a2b1c5a3"
    

    示例2:

     输入:"abbccd"
     输出:"abbccd"
     解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
    

    提示:

    1. 字符串长度在[0, 50000]范围内。

    我的思路 


    快慢指针扫描字符串

    出现一样的字符就统计相同的字符个数

    class Solution(object):
        def compressString(self, S):
            """
            :type S: str
            :rtype: str
            """
            ss = S + "0"
            ans = ""
            count = 1
            idx , fast = 0 , 1
            while idx<=len(ss):
                if fast>len(ss)-1:
                    idx+=1
                    continue
                if ss[fast] == ss[idx]:
                    count+=1
                    fast+=1
                else:
                    ans += ss[idx]+str(count)
                    idx = fast
                    fast+=1
                    count=1
            if len(ans)>= len(S):
                return S
            return ans

    小结:

    题解 


     1.用ch来记录当前要压缩的字符

    class Solution:
        def compressString(self, S: str) -> str:
            if not S:
                return ""
            ch = S[0]
            ans = ''
            cnt = 0
            for c in S:
                if c == ch:
                    cnt += 1
                else:
                    ans += ch + str(cnt)
                    ch = c
                    cnt = 1
            ans += ch + str(cnt)
            return ans if len(ans) < len(S) else S

    总结


     1. 题解用用额外变量来记录当前要压缩的字符,省掉双指针遍历的麻烦。

  • 相关阅读:
    iOS-深入理解(转载)
    iOS开发
    夜光遥感
    希尔伯特曲线在地图图像分割中的应用
    希尔伯特曲线
    NLP生成论文
    MapGIS SDK(C++)【基础篇】
    从npm到vue和nodejs
    分形在遥感和GIS中的应用
    MapReduce、Hadoop、PostgreSQL、Spark
  • 原文地址:https://www.cnblogs.com/remly/p/12502262.html
Copyright © 2011-2022 走看看