LeetCode -- 面试题01.06字符串压缩(Python)

题目

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

示例1:

输入:“aabcccccaaa”
输出:“a2b1c5a3”

示例2:

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

解题思路

  • 字符串作为输入参数,需要首先判断字符串是否为空字符串;
  • 创建新的空字符串new_str作为压缩后的字符串返回;
  • char表示比较字符,其初始值为字符串的起始字符;
  • times表示比较字符的重复次数,当遍历原字符串时,某个字符等于比较字,则times = times + 1
  • 当到了某个字符不等于比较字符时,把比较字符和其对应的重复次数写进新字符串new_str中,此时再把这个字符赋值给比较字符char,进行下一个字符的比较,重复次数times赋值为1;
  • 当遍历进行到最后一个字符时,把此时的比较字符和对应的重复次数写进new_str中;
  • 最后根据题目要求将新字符串的长度和原字符串的长度比较,返回结果。

代码提交

class Solution(object):
    def compressString(self, string):
        """
        :type S: str
        :rtype: str
        """
        new_str = ''
        times = 0
        if string == '':
            return string
        else:
            char = string[0]
            for i in range(len(string)):
                if string[i] == char:
                    times += 1
                else:
                    new_str = new_str + char + str(times)
                    char = string[i]
                    times = 1
                if i == len(string) - 1:
                    new_str = new_str + char + str(times)
            if len(new_str) < len(string):
                return new_str
            else:
                return string

执行用时 :204 ms, 在所有 Python 提交中击败了28.05%的用户
内存消耗 :15.3 MB, 在所有 Python 提交中击败了100.00%的用户

拓展:字符串函数str.join()

1、虽然字符串和列表都可迭代类型,不过字符串没有函数像list.append()那样可以直接在字符串后面加入元素。其实字符串在后面加入元素更简单,只需要做加法就好。

实例:

str1 = "my name is "
str2 = "Jerry"
string = str1 + str2
print(string)

输出:

my name is Jerry

2、字符串有个和list.append()看起来相似,实则不一样的函数str.join()

语法:
str.join(sequence)

参数:

  • sequence – 要连接的元素序列。

返回:

返回通过指定字符连接序列中元素后生成的新字符串。

实例:

str1 = '-'
seq = ['J','e','r','r','y']
print(str1.join(seq))

输出:

J-e-r-r-y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值