输入一个字符串,字符串由字母数字组成,求其中最大不规则递增数长度。
示例
输入: 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