[英]Construct a target string from a list of substrings
我正在做一個小項目,我需要安排將 output 成為目標字符串的現有子字符串。 不過,我在處理一個特殊情況時遇到了麻煩。 假設我想形成句子:
“棕狐很酷。”
我得到了輸入
[“棕狐”、“The”、“棕”、“酷”]
如果我天真地實現這一點,我會逐字 go 並開始形成“The”+“Brown”,只是意識到我實際上必須以“The Brown Fox”開頭。 也可能是無法創建目標字符串的情況。
這聽起來有點像動態編程,但我無法將其形式化並處理我上面提到的兩種情況。 有人介意給我一些幫助,或者指出我可以閱讀類似問題的地方嗎?
首先讓我們舉個例子來更好地理解:
示例 1:
輸入:
target = "棕狐很酷。"
arr = [“棕色狐狸”,“The”,“棕色”,“很酷”]
Output:
真的
示例 2:
輸入:
target = "棕狐很酷。"
arr = ["The brown", "The", "brown", "iscool"]
Output:
錯誤的
示例 3:
輸入:
target = "棕狐很酷。"
arr = ["棕狐是", "The", "棕狐", "很酷"]
Output:
真的
解釋:
即使你總是選擇最大匹配的 substring,你也不會得到正確的答案。
遞歸方法:
步驟 1:使用您當前的索引與列表的字符串匹配,即 arr。
步驟 2:對於 arr 的每個元素,首先您必須從索引中匹配目標字符串。
Step-3:如果匹配,您需要通過增加其索引來查找是否可以匹配剩余的目標字符串。
Step-4:因此在遞歸結束時,您將根據它們的返回值知道它是否可能(真)或不(假)。
Python 代碼:
def match_string(string, target, index):
lens = len(string)
lent = len(target)
if(index + lens > lent):
return False
for i in range(index,index+lens):
if(string[i-index] != target[i]):
return False
if(target[index+lens] == " " or target[index+lens] == "."):
return True
else:
return False
def solve(arr,target,index):
n = len(arr)
ln = len(target)
if(index == ln):
return True
elif(index > ln):
return False
result = False
for em in arr:
if(match_string(em,target,index)):
result = result or solve(arr,target,index+len(em)+1)
return result
target = "The brown fox is cool."
arr = ["The brown", "The", "brown","fox", "is cool"]
answer = solve(arr,target,0)
動態規划方法:
只需使用索引來記住每個遞歸步驟的結果。
def match_string(string, target, index):
lens = len(string)
lent = len(target)
if(index + lens > lent):
return False
for i in range(index,index+lens):
if(string[i-index] != target[i]):
return False
if(target[index+lens] == " " or target[index+lens] == "."):
return True
else:
return False
def solve(arr,target,index,dp):
n = len(arr)
ln = len(target)
if(index == ln):
return True
elif(index > ln):
return False
if(dp[index] != None):
return dp[index]
result = False
for em in arr:
if(match_string(em,target,index)):
result = result or solve(arr,target,index+len(em)+1,dp)
dp[index] = result
return dp[index]
target = "The brown fox is cool."
arr = ["The brown fox", "The", "brown", "is cool"]
dp = [None for i in range(len(target))]
answer = solve(arr,target,0,dp)
print(answer)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.