python获取指定字符串中重复模式最高的字符串

来源:互联网 发布:软件项目开发过程管理 编辑:程序博客网 时间:2024/06/05 05:53

    给定一个字符串,如何得到其中重复模式最高的子字符串,我采用的方法是使用滑窗机制,对给定的字符串切分,窗口的大小从1增加到字符串长度减1,将所有的得到的切片统计结果,在这里不考虑单个字符的重复模式,好了,很简单看具体实现:

#!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_listdef 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

    结果如下:

[('45', 8), ('4545', 5), ('454', 5), ('545', 5), ('54', 5), ('5454', 4), ('454545', 4), ('45454', 4), ('54545', 4), ('545454', 3)][Finished in 0.5s]
    结果列表中第一个即为所求,当然,基于此还可以继续改进有很多别的需求。

阅读全文
0 0