前言:
此时兄弟们对“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语言 #压缩字符串二