[英]How to find the longest repeating sequence using python
我經歷了一次采訪,他們讓我打印最長的重復字符序列。
我被卡住了有什么辦法嗎?
但是我的代碼只打印字符串中存在的字符數是否有任何方法可以獲得預期的輸出
import pandas as pd
import collections
a = 'abcxyzaaaabbbbbbb'
lst = collections.Counter(a)
df = pd.Series(lst)
df
預期輸出:
bbbbbbb
如何在上面的代碼中添加邏輯?
正則表達式解決方案:
max(re.split(r'((.)\2*)', a), key=len)
或者沒有圖書館幫助(但效率較低):
s = ''
max((s := s * (c in s) + c for c in a), key=len)
兩者都計算字符串'bbbbbbb'
。
在沒有任何模塊的情況下,您可以使用推導式向后遍歷可能的大小並獲得字符串中存在的第一個字符乘法:
next(c*s for s in range(len(a),0,-1) for c in a if c*s in a)
雖然這在效率方面很糟糕
另一種方法是檢測字母變化的位置並從這些位置中取出最長的子范圍
chg = [i for i,(x,y) in enumerate(zip(a,a[1:]),1) if x!=y]
s,e = max(zip([0]+chg,chg+[len(a)]),key=lambda se:se[1]-se[0])
longest = a[s:e]
當然,基本的 for 循環解決方案也適用:
si,sc = 0,"" # current streak (start, character)
ls,le = 0,0 # longest streak (start, end)
for i,c in enumerate(a+" "): # extra space to force out last char.
if i-si > le-ls: ls,le = si,i # new longest
if sc != c: si,sc = i,c # new streak
longest = a[ls:le]
print(longest) # bbbbbbb
一個更冗長的解決方案,從以下批發商中挑選:
最大連續重復字符串
def maxRepeating(str):
len_s = len(str)
count = 0
# Find the maximum repeating
# character starting from str[i]
res = str[0]
for i in range(len_s):
cur_count = 1
for j in range(i + 1, len_s):
if (str[i] != str[j]):
break
cur_count += 1
# Update result if required
if cur_count > count :
count = cur_count
res = str[i]
return res, count
# Driver code
if __name__ == "__main__":
str = "abcxyzaaaabbbbbbb"
print(maxRepeating(str))
解決方案:
('b', 7)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.