给定一个字符串,如何得到其中重复模式最高的子字符串,我采用的方法是使用滑窗机制,对给定的字符串切分,窗口的大小从1增加到字符串长度减1,将所有的得到的切片统计结果,在这里不考虑单个字符的重复模式,好了,很简单看具体实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#!usr/binenv python
#encoding:utf-8
'''
__Author__:沂水寒城
统计一个给定字符串中重复模式数量得到最高重复模式串
'''
def slice (num_str,w):
'''
对输入的字符串滑窗切片返回结果列表
'''
result_list = []
for i in range ( len (num_str) - w + 1 ):
result_list.append(num_str[i:i + w])
return result_list
def get_repeat_num_seq(num_str):
'''
统计重复模式串数量
'''
result_dict = {}
result_list = []
for i in range ( 2 , len (num_str)):
one_list = slice (num_str, i)
result_list + = one_list
for i in range ( len (result_list)):
if result_list[i] in result_dict:
result_dict[result_list[i]] + = 1
else :
result_dict[result_list[i]] = 1
sorted_result_dict = sorted (result_dict.items(), key = lambda e:e[ 1 ], reverse = True )
return sorted_result_dict[ 0 : 10 ]
if __name__ = = '__main__' :
num_list = get_repeat_num_seq( '4513785645121214545454545457894' )
print num_list
|
结果如下:
1
2
|
[( '45' , 8 ), ( '4545' , 5 ), ( '454' , 5 ), ( '545' , 5 ), ( '54' , 5 ), ( '5454' , 4 ), ( '454545' , 4 ), ( '45454' , 4 ), ( '54545' , 4 ), ( '545454' , 3 )]
[Finished in 0.5s ]
|
结果列表中第一个即为所求,当然,基于此还可以继续改进有很多别的需求。
以上这篇python获取指定字符串中重复模式最高的字符串方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Together_CZ/article/details/74761447