烤鸡鸡烤题

闲来无事,刷刷题玩。

据说是OD鸡烤题:

由(连续)英文字符加(连续)数字构成一个子串,多个子串以逗号分隔,一个长字符串由字符‘@’分隔为两部分,前、后面是N个子串以逗号分隔。现有一种运算,该长字符串前后两部分英文部分相同的子串数字相减,然后按前面部分顺序输出,如果为0则不输出,最后面+‘@’。

例如:

输入:‘a1,b2,c3@a1,c1’

运算结果:‘b2,c3@’

这里升个级,没有逗号分隔了

思路,

切割字符串为前后两部分

切割前后两部分字符串为单独的“组”,前面英文,后面数字

匹配,英文字符相同的,数字相减

如果没有找到相同的,不处理

添加到列表中

顺序输出

import re
s='a1b2c3@a1d1'
s1,s2=s.split('@')
s1=re.findall('[a-z]+[0-9]+',s1)
s2=re.findall('[a-z]+[0-9]+',s2)
s1=[list(re.findall('([a-z]+)([0-9]+)',i)[0]) for i in s1]
s2=[list(re.findall('([a-z]+)([0-9]+)',i)[0]) for i in s2]
def minus(s1,s2):
    rl=[]
    for i in s1:
        for j in s2:
            if i[0]==j[0]:
                i[1]=int(i[1])-int(j[1])
                rl.append(i)
                break
        else:
            rl.append(i)
    return ''.join([i[0]+str(i[1]) for i in rl if i[1] not in ['0',0]])+'@'
    
print(minus(s1,s2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值