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("没有连续重复字符串段")
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
可以分两步,第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