首页 > 技术文章 > [ 力扣活动0316 ] 面试题 01.06. 字符串压缩

remly 2020-03-16 10:31 原文

<>

题目描述


字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串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. 题解用用额外变量来记录当前要压缩的字符,省掉双指针遍历的麻烦。

推荐阅读