我有兩個字串:
str1 = "123147"
str2 = "1474671231"
結尾與( )str1開頭有一些相似的部分,我想找到這個相似部分的長度,所以我嘗試:str2"147"
for ch in str1:
if ch == str2[0]:
start_idx = len(str1) - date.index(ch)
break
但是問題是如果開頭與( )str1的開頭相同,它會回傳一個錯誤,如果我顛倒檢查順序,它仍然有這個問題()。有什么簡單的方法可以解決嗎?str2"1""7"
最重要的是,我只想檢查 的結尾str1和開頭str2,而忽略其他部分,例如"1231"instr1和str2應該忽略。
uj5u.com熱心網友回復:
嘗試所有 的后綴似乎沒有問題str1,從最長的開始:
def intersection_length(str1, str2):
for i in range(max(0, len(str2) - len(str1), len(str1))):
if str2.startswith(str1[i:]):
return len(str1) - i
return 0
運行為:
str1 = "12314755"
str2 = "14755467"
print(intersection_length(str1, str2)) # 5
uj5u.com熱心網友回復:
試試這個,通過反轉字串來獲得最大匹配長度
str1 = "123147"
str2 = "147467"
result = 0
for i in range(len(str2)):
temp = str2[:i 1]
if str1.endswith(temp):
result = len(temp)
print(result)
uj5u.com熱心網友回復:
一種可能的方法是使用正則運算式,并以一種智能的方式連接字串:
import re
C = '#'
result = len(re.findall(r'^(\w*).*\1$', str2 C str1)[0])
這里的假設是兩者str1都不str2包含 character C。
另一種解決方案(具有最佳復雜性,即在處理長字串時與其他方法相比非常快,但顯然比您需要的更復雜):
def longest_prefix_suffix(str1, str2):
n = min(len(str1), len(str2))
lps = [0] * n
l = 0
i = 1
while i < n:
if str1[i] == str2[l]:
l = 1
lps[i] = l
i = 1
else:
if l != 0:
l = lps[l - 1]
else:
lps[i] = 0
i = i 1
return lps[n - 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/452494.html
標籤:Python python-3.x 算法
