当前位置: 首页 > 面试题库 >

如何判断字符串是否在Python中重复出现?

夏祯
2023-03-14
问题内容

我正在寻找一种方法来测试给定的字符串是否对整个字符串重复。

例子:

[
    '0045662100456621004566210045662100456621',             # '00456621'
    '0072992700729927007299270072992700729927',             # '00729927'
    '001443001443001443001443001443001443001443',           # '001443'
    '037037037037037037037037037037037037037037037',        # '037'
    '047619047619047619047619047619047619047619',           # '047619'
    '002457002457002457002457002457002457002457',           # '002457'
    '001221001221001221001221001221001221001221',           # '001221'
    '001230012300123001230012300123001230012300123',        # '00123'
    '0013947001394700139470013947001394700139470013947',    # '0013947'
    '001001001001001001001001001001001001001001001001001',  # '001'
    '001406469760900140646976090014064697609',              # '0014064697609'
]

是重复的字符串,并且

[
    '004608294930875576036866359447',
    '00469483568075117370892018779342723',
    '004739336492890995260663507109',
    '001508295625942684766214177978883861236802413273',
    '007518796992481203',
    '0071942446043165467625899280575539568345323741',
    '0434782608695652173913',
    '0344827586206896551724137931',
    '002481389578163771712158808933',
    '002932551319648093841642228739',
    '0035587188612099644128113879',
    '003484320557491289198606271777',
    '00115074798619102416570771',
]

是那些没有的例子。

我得到的字符串的重复部分可能很长,而且字符串本身可以是500个或更多字符,因此循环遍历每个字符以尝试构建模式,然后检查模式与字符串的其余部分似乎很慢。将其乘以可能的数百个字符串,就看不到任何直观的解决方案。

我对正则表达式进行了一些研究,当您知道要查找的内容时,或者至少在寻找所需模式的长度时,它们似乎非常有用。不幸的是,我都不知道。

我怎么知道一个字符串是否在重复本身,如果是,最短的重复子序列是什么?


问题答案:

这是一个简洁的解决方案,它避免了正则表达式和缓慢的Python内循环:

def principal_period(s):
    i = (s+s).find(s, 1, -1)
    return None if i == -1 else s[:i]

David Zhang的解决方案无疑是赢家,对于大型示例集,其性能至少比其他同类产品高出5倍。

(那个答案的话,不是我的。)

这是基于这样的观察,即且仅当字符串等于其自身的非平凡旋转时,它才是周期性的。感谢@AleksiTorhamo,他意识到我们可以从sin的第一次出现的索引中恢复本金周期(s+s)[1:-1],并向我通知Python的可选参数startend参数string.find



 类似资料:
  • 如何判断字符串是否在重复,如果是,最短的重复子序列是多少?

  • Python3 实例 以下实例通过创建自定义函数 is_number() 方法来判断字符串是否为数字: 实例(Python 3.0+)# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com def is_number(s): try: float(s) return True except ValueErr

  • 检查给定的参数是否是一个字符串。 使用 typeof 来检查一个值是否为一个字符串。 const isString = val => typeof val === 'string'; isString('10'); // true

  • Python3 实例 以下代码演示了Python字符串的判断: # Filename : test.py # author by : www.runoob.com # 测试实例一 print("测试实例一") str = "runoob.com" print(str.isalnum()) # 判断所有字符都是数字或者字母 print(str.isalpha()) # 判断所有字符都是字母 pr

  • 本文向大家介绍python判断字符串是否纯数字的方法,包括了python判断字符串是否纯数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python判断字符串是否纯数字的方法。分享给大家供大家参考。具体如下: 判断的代码如下,通过异常判断不能区分前面带正负号的区别,正则表达式可以根据自己需要比较灵活的写,通过isdigit方法用来判断是否是纯数字,测试代码如下 输出结果如下: 判

  • 问题内容: 我有一个带有文本框的页面,用户应在其中输入24个字符(字母和数字,不区分大小写)的注册码。我曾经限制用户输入24个字符。 注册代码通常以破折号分隔的字符组形式给出,但是我希望用户输入不带破折号的代码。 如何在没有jQuery的情况下编写JavaScript代码,以检查用户输入的给定字符串不包含破折号,或者更好的是,仅包含字母数字字符? 问题答案: 在中找到“你好”