(Python)字符串摘要

给定一个字符串的摘要算法,请输出给定字符串的摘要值。
1.去除字符串中非字母的符号。
2.如果出现连续字符(不区分大小写),则输出:该字符(小写)+ 连续出现的次数。
3.如果是非连续的字符(不区分大小写),则输出:该字符(小写)+ 该字母之后字符串中出现的该字符的次数。
4.对按照以上方式表示后的字符串进行排序:字母和紧随的数字作为一组进行排序,数字大的在前,数字相同的,则按字母进行排序,字母小的在前。
输入
一行字符串,长度为[1,200]
输出
摘要字符串

示例一
输入
aabbcc
输出
a2b2c2
示例一
输入
bAaAcBb
输出
a3b2b2c0
说明
bAaAcBb:
第一个 b 非连续字母,该字母之后字符串中还出现了 2 次(最后的两个 Bb),所以输出 b2,
a 连续出现 3 次,输出 a3,
c 非连续,该字母之后字符串再没有出现过 c,输出 c0
Bb 连续 2 次,输出 b2
对 b2a3c0b2 进行排序,最终输出 a3b2b2c0
from itertools import groupby

strs = [x.lower() for x in input() if x.isalpha()]
group = [list(n) for m, n in groupby(strs)]  # 按照是否连续进行分组
is_series = [s[0] + str(len(s)) for s in group if len(s) > 1]  # 连续字符串按照 字符+数量 格式保存
no_series = []
for i, s in enumerate(group):
    if len(s) == 1:
        no_series.append((s[0], strs.index(s[0])))

for c, i in no_series:  # 不连续字符按照 字符+后续数量 格式保存
    c_num = str(strs[i+1:].count(c))
    is_series.append(c + c_num)

sorted_is_series = sorted(is_series, key=lambda x: (-int(x[1:]), x[0]))   # x[1:]倒序排列, x[0]升序排列
print(*sorted_is_series, sep='')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>