关于#python#的问题:Python如何检测字符串中是否含重复字符串段(长度>=2)

Python如何检测字符串中是否含重复字符串段(长度>=2且连续出现)?
例如:
CCABCABCAA 中 ABC重复出现2次
RSADADFGDFHGFHG 中 AD重复出现2次, FHG重复出现2次

PS:CSDN禁止重复输入3次及以上

#用set()

    def unique(string):
        if string is None:
            return False
        return len(set(string)) == len(string)

函数原型:

    def __init__(self, seq=()): # known special case of set.__init__
        """
        set() -> new empty set object
        set(iterable) -> new set object
        
        Build an unordered collection of unique elements.
        返回一个没用重复元素的无序集合
        # (copied from class doc)
        """
        pass

或者也可以这样:

class Solution:
    """
    @param: str: A string
    @return: a boolean
    """
    def isUnique(self, str):
        # write your code here
        a = list(str)#转化成列表
        n = len(a)
        for i in range(n):
            if str.count(a[i]) != 1: #判断单个字符串a[i]出现次数
                return False
                #break
        return True
import re
s = "RSADADADFGDFHGFHG"

d = {}
l = 2
while l < (len(s) // 2 + 1):
    for i in range(len(s)):
        if i + l > len(s):break
        t = s[i:i + l]
        if t * 2 in s:
            tt = f"(({t}){{2,}})"
            res = re.search(tt, s)
            d[t] = res[0].count(t)
    l += 1
print(d)
"""--result
{'AD': 3, 'DA': 2, 'FHG': 2}
"""

用正则表达式

import re
s = 'CAABCABCAA'
reg = re.search(r'(\w{2,})\1',s)
if reg:
    print("连续重复字符串段为:",reg.group(1))
else:
    print("没有连续重复字符串段")

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img


可以查看手册:python- 字符串 中的内容

可以分两步,第1步找出全部子串,第2步看每一个子串是否存在连续重复,代码可以优化,不过能跑:

string = "RSADADFGDFHGFHG"
all_substrings = [string[i:j] for i in range(len(string)) for j in range(i + 1, len(string) + 1)]
print(set(all_substrings))  # set() 取消子串重复

target_substring_count = 0

for item in set(all_substrings):
    
    counts = 0
    while item * (counts+1) in string:
        counts += 1
        
    if counts > 1 and len(item) > 1:
        print(item, counts)
        target_substring_count += 1

# 符合要求的子串一个也没有找到
if target_substring_count == 0:
    print("\nnothing found!")

运行结果:

{'GFH', ............ 'FHG', 'ADF',  'DFGDFHGFH'}
FHG 2
AD 2