字符串问题python实现(二 )

问题:求字符串中重复出现且长度最长子字符串,要求输出:符合条件子字符串、其重复出现次数、其首字母位置。

分析:后缀数组方法求解。

python版代码:

# 问题:求字符串中重复出现且长度最长子字符串,要求输出:符合条件子字符串、其重复出现次数、其首字母位置。
# 分析:后缀数组方法求解。
# by chasdmeng

def build_suffix_array(suffix_array, text_string):
    for i in range(len(text_string)):
        suffix_array.append(text_string[i:])
    suffix_array.sort()

def comlen(str_a, str_b):
    max_len = 0
    for i in range(1, len(str_a)+1):
        max_len = i if str_a[:i]==str_b[:i] else max_len

    return max_len

def longset_repeat_substring(suffix_array, text_string):
    max_len, max_idx = 0, 0
    t={}
    for i in range(len(text_string) - 1):
        com_len= comlen(suffix_array[i], suffix_array[i+1])
        if com_len in t:
            t[com_len]+=1
        else:
            t[com_len] = 2
        [max_len, max_idx] = [com_len, i] if com_len > max_len else [max_len, max_idx]
        loc = [len(text_string)-len(suffix_array[max_idx + i]) + 1 for i in range(t[max_len])]
        loc.sort()
    return suffix_array[max_idx][:max_len], t[max_len], loc

if __name__ == ‘__main__‘:
    suffix_array = []
    text_string = "yyabcdabjcabceg"

    build_suffix_array(suffix_array, text_string)
    substring, time, location = longset_repeat_substring(suffix_array, text_string)
    print ‘\nIn \‘‘, text_string, ‘\‘, the longest string‘, ‘\‘‘, substring, ‘\‘occuers‘,            time, ‘times‘,‘,the first character position‘, ‘,‘.join([str(i) for i in location]), ‘.‘

字符串问题python实现(二 ),布布扣,bubuko.com

时间: 2025-01-02 03:44:00

字符串问题python实现(二 )的相关文章

Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说那么的被动,我学习的是Python2.7,虽然现在随着版本的迁移至Python3,但是这个并不会对我们造成什么困扰,毕竟只是一个适应阶段 我们的学习资料:廖雪峰官方网站Python2.7教程 一.IDE选择PyCharm 我们虽然在前面一章已经配置过,但是我们还是有很多的IDE可以开发Py,比如su

python【二】python的字符串操作

python的字符串操作很灵活:先来看一个例子: str='helloworld' 首先我们输出这个字符串: print  str这是一种表示方法,还有很多表示的方法: 比如: print  str[0:10] 我们也能得到 helloworld print str[1:3] 我们得到:el,截取字符串的el两个字符: 截取字符串的前提条件: 是这样的我们如果要截取某段字符,首先要查找到这段字符的起始位置,然后才能正确截取:在python中提供了字符串查找的方法,这个跟c语言里面的字符查找很相似

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

【美妙的Python之二】Python初步

美妙的Python之Python起步 简而言之: Python 是能你无限惊喜的语言,与众不同.           1.动态类型:         Python是一种动态类型语言,不需要预先声明变量的类型,变量的类型和值在赋值那一刻动态地初始化.这一点与C/C++,Java等静态类型语言完全不同,静态类型在编译阶段就必须显示的声明变量的类型,动态类似在运行时才确定变量的类型.        变量a动态地初始化为int类型,并赋值2014;        变量msg则动态初始化为str类型,并赋

计算4000000000以内最大的f(n)=n的值---字符串问题python实现(五)

问题: 写一个函数,计算4 000 000 000 以内的最大的那个f(n)=n的值,函数f的功能是统计所有0到n之间所有含有数字1的数字和.比如:f(13)= 6,因为"1"在"1,2,3,4,5,6,7,8,9,10,11,12,13"中的总数是6(1,10,11,12,13). 分析: 一.简单方法 - 枚举 采用"枚举法"对每个数都计算一遍1的个数,直到枚举完给定范围所有数,找到符合f(n)=n的数.此方法,代码效率极低,运算所需时间巨大

PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

Python 练习 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的数,屏幕显示"太大了,请重新输入"如果小于预设的数,屏幕显示"太小了,请重新输入"如此循环,直到猜中,显示"恭喜你,猜中了!共猜了N次"N为用户猜测次数. 答案: import random def guess_number(): true_num = random.randint(1, 100) user_n

Python - 模块(二)

目录 Python - 模块(二) re re下面的方法 logging os Python - 模块(二) re re模块提供了正则表达式的相关操作 主要字符介绍: . 通配符,除了换行符之外的任意字符 ^ 匹配字符串的开始 $ 匹配字符串的结尾 关于次数的: * 按紧挨着的字符重复无数次, 重复零次或更多次 + 1到无穷次, 重复一次或更多次 ? (0,1) 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 其他的: [] 字符集 | 或 () 分组 \

Python基础二:pycharm的安装及简单使用,while循环,格式化输出,运算符, 编码的初识,git

Python基础二: pycharm的安装及简单使用,while循环,格式化输出,运算符, 编码的初识,git 1.pycharm的安装及简单使用 Tab / Shift + Tab 缩进.不缩进当前行 (先选中代码) Shift + 滚轮 放大缩小代码 Ctrl + ? 注释.解注(先选中代码) Ctrl + d 复制上一行代码 Ctrl + z 撤销 Ctrl + Shift + F10 RUN Ctrl + 左键---->点击 int,str 等可查看源码 2.while 循环(重点) w

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令