输入一个字符串,字符串由字母数字组成,求其中最大不规则递增数长度。
示例
输入:
ashd2n3213333334723231n1234567asdkl554545
最长不规则递增数是:“133333347”
输出:
9
133333347
代码:
import re
def func(s):
'''
type: s: string
rtype: count: int
rtype: dic: dict
'''
#新建列表用来装连续数字部分
li = []
for i in range(len(s)-1):
#如果右边的大于左边的,那么就把左边的装进数组
if s[i+1] >= s[i]:
li.append(s[i])
if s[i+1]==s[-1]:
li.append(s[i+1])
else:
#如果右边的比左边的小,那么把左边装入数组的同时添加一个空格,或者使用其他标识符来代替
li.append(s[i])
li.append(" ")
#将列表变成字符串
m = "".join(map(str,li))
#将字符串按照空格分割成列表
n = [i for i in m.split(" ")]
#新建列表装每个列表的长度
o = []
#创建字典,返回最大长度的值
dic = {}
l = []
for i in range(len(n)):
key_ = len(n[i])
dic[key_]= n[i]
o.append(key_)
#获取列表中最大的长度
count = max(o)
#将最大长度返回
return count,dic
if __name__ == '__main__':
s = "ashd2n3213333334723231n1234567asdkl554545"
#利用正则匹配出数字部分
l = re.findall(r"\d+",s)
#新建一个列表用来装每个数字部分处理后的长度
a = []
#新建一个字典,用来装所有返回的键值对
(问题:当出现两个相同长度的值,如何打印出两个呢?)
dic = {}
for i in range(len(l)):
n,dic_a = func(l[i])
dic.update(dic_a)
a.append(n)
#打印最大的连续数字正向排序的长度
print(max(a))
print(dic.get(max(a)))
输出:
9
133333347
当出现两个相同长度的值,如何打印出两个呢? 很简单,加入字典时,把值换成键,把键换成值,然后通过相同值来找不同的键即可
import re
def func(s):
'''
type: s: string
rtype: count: int
'''
#新建列表用来装连续数字部分
li = []
for i in range(len(s)-1):
#如果右边的大于左边的,那么就把左边的装进数组
if s[i+1] >= s[i]:
li.append(s[i])
if s[i+1]==s[-1]:
li.append(s[i+1])
else:
#如果右边的比左边的小,那么把左边装入数组的同时添加一个空格,或者使用其他标识符来代替
li.append(s[i])
li.append(" ")
#将列表变成字符串
m = "".join(map(str,li))
#将字符串按照空格分割成列表
n = [i for i in m.split(" ")]
#新建列表装每个列表的长度
o = []
#创建字典,返回最大长度的值
dic = {}
l = []
for i in range(len(n)):
key_ = len(n[i])
dic[n[i]]= key_
o.append(key_)
#获取列表中最大的长度
count = max(o)
#将最大长度返回
return count,dic
if __name__ == '__main__':
s = "ashd2n32133334723231n1234567asdkl554545"
#利用正则匹配出数字部分
l = re.findall(r"\d+",s)
#新建一个列表用来装每个数字部分处理后的长度
a = []
#新建一个字典,用来装所有返回的键值对(若有相同的长度,那么把值作为键,把长度作为值保存在字典中)
dic = {}
for i in range(len(l)):
n,dic_a = func(l[i])
dic.update(dic_a)
a.append(n)
#打印最大的连续数字正向排序的长度
print(max(a))
#分别将字典的键和值装入两个列表中
keys = []
values = []
for key,value in dic.items():
keys.append(key)
values.append(value)
列表解析,通过值来找键(先遍历共同值所在的下标,然后通过键下标索引找到对应的键值)
[print(keys[i]) for i in range(len(values)) if values[i] == max(a)]
输出:
7
1333347
1234567
|