闲来无事,刷刷题玩。
据说是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))