![](/img/trans.png)
[英]How to find repeated substring in a string using regular expressions in Python?
[英]Using hashing to find a repeated substring inside a string
解決了問題:在字符串中找到重復的子字符串,是否可以使用哈希? 我想創建一個字典,將子字符串作為鍵,並將重復實例的數量作為值。 這是我到目前為止所擁有的。 我收到錯誤消息是因為我正在使用子字符串作為字典的鍵。 誰能發現我的錯誤? 謝謝!!!
def findsubs(str):
d={}
for i in range(len(str)-1):
for j in range(i+2, len(str)-2):
if d[str[i:j]]>1:
return str[i:j]
else:
d[str[i:j]] = d[str[i:j]] +1
return 0
打印findsubs(“ abcbc”)
總體思路應該可行。 只是,如果在執行查詢時未在字典中找到鍵,則會出現錯誤-因此您必須在執行查詢之前檢查鍵是否存在,如果沒有,則進行初始化:
def findsubs(str):
d={}
for i in range(len(str)-1):
for j in range(i+2, len(str)-2):
if str[i:j] not in d:
d[str[i:j]] = 0
if d[str[i:j]]>1:
return str[i:j]
else:
d[str[i:j]] = d[str[i:j]] +1
return 0
請注意,代替if str[i:j] not in d: d[str[i:j]] = 0
,您可以執行d.setdefault(str[i:j], 0)
,將值設置為0
如果鍵不在字典中,則將其保留不變。
不過,還有一些評論:
None
,而不是0
。 str
因為它是內置函數。 j
直到字符串的結尾。 所以:
def findsubs(s):
found = set()
for i in range(len(s)-1):
for j in range(i+2, len(s)+1):
substr = s[i:j]
if substr in found:
return substr
found.add(substr)
return None
你快到了
def findsubs(instr):
d={}
for i in range(len(instr)):
for j in range(i+2, len(instr)+1):
print instr[i:j]
d[instr[i:j]] = d.get(instr[i:j],0) + 1
return d
instr = 'abcdbcab'
print instr
print findsubs('abcdbcab')
這將起作用,我為調試目的添加了一個內部打印,在測試之后將其刪除。
結果是您要求的帶有子字符串計數的字典:)
{'abcd':1,'ab':2,'cdb':1,'dbc':1,'cdbcab':1,'cd':1,'abc':1,'cdbc':1,' bcab':1,'abcdbc':1,'ca':1,'db ca':1,'bc':2,'dbcab':1,'db':1,'cab':1,'bcdbcab ':1,'bcdbc':1,'abcdbca':1,'cdbca':1,'abcdbcab':1,'bcdb':1,'bcd':1,'abcdb':1,'bca': 1,'bcdbca':1}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.