龙空技术网

字符串压缩

深度学习工程师 51

前言:

此时兄弟们对“java字符压缩算法”大体比较注重,看官们都想要知道一些“java字符压缩算法”的相关文章。那么小编在网摘上收集了一些关于“java字符压缩算法””的相关知识,希望姐妹们能喜欢,我们一起来学习一下吧!

题目描述

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

示例1:

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

示例2:

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

提示:

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

解题思路

每日一题的一个Easy题目, 题目描述里已经说明了解法, 可以按照题目描述的压缩步骤写一遍代码, 或者使用双指针法, 遍历字符串得到压缩结果, 其他使用双指针法的问题还有很多, 比如用一次遍历找到单向链表的倒数第n个节点.

代码实现

class Solution:    def compressString(self, S: str) -> str:        return self.doublePointer2(S)    def basicMethod(self, S: str) -> str:        '''        基本方法.        '''        if S == '':            return S        tag = S[0]        n = 0        S2 = ''        for ch in S:            if ch == tag:                n += 1            else:                S2 += tag + str(n)                tag = ch                n = 1        S2 += tag + str(n)        if len(S2) >= len(S):            return S        else:            return S2    def doublePointer(self, S: str) -> str:        '''        双指针法, 计算连续字符串.        '''        if S == '':            return S        i, j = 0, 0        S2 = ''        while j < len(S):            if S[i] == S[j]:                j += 1            else:                S2 += S[i] + str(j-i)                i = j        S2 += S[i] + str(j-i)        if len(S2) >= len(S):            return S        else:            return S2    def doublePointer2(self, S: str) -> str:        '''        另一种写法, 双指针.        '''        if S == '':            return S        i = 0        N = len(S)        S2 = ''        while i < N:            j = i            while j < N and S[i] == S[j]:                j += 1            S2 += S[i] + str(j-i)            i = j        if len(S2) >= N:            return S        else:            return S2

更过LeetCode题解敬请期待。

标签: #java字符压缩算法 #压缩字符串c语言 #压缩字符串二