給出三個字串a、b和c。最初是字串b并且c是空的。
我們必須c使用以下移動來制作字串:
move1:我們可以移動字串的第一個字符a并追加到字串b
或
move2:我們可以移動字串的最后一個字符b并追加到字串c
按照這兩個規則將有多個可能的字串,但是我們有根據詞匯順序回傳一個。
示例:
給定:a = 'dad',,
一種可能的方法b="":c= ""
- 獲取
a[0]并附加到b. 所以字串變成了:a = "ad", b = 'd', c='' a[0]到字串b:a = 'd', b = 'da', c = ''b[-1]到字串c:a = 'd', b='d', c = 'a'- a[0] 到字串 b :
a='', b='dd', c ='a' - b[-1] 到字串 c :
a='', b='d', c='ad' - b[-1] 到字串 c :
a='', b='', c='add'所以這里c = 'add'其他答案也是可能的,但我們必須回傳按字典順序排在第一位的答案。'add'這個例子也是 如此。
你能幫我實作這個目標嗎?
我的代碼:
class Solution:
def solve(self, input1: int, input2: str) -> str:
res = []
def rec(st1,st2, st3):
if not st1 and not st2:
res.append(st3[:])
return
if st1:
rec(st1[1:], st2 st[0], st3)
if st:
rec(st1, st2[:len(st2)-1], st3 st2[-1])
rec(input2, "", "")
res.sort()
return res[0]
無法使用此代碼通過測驗用例。
注意:這個問題是在昨天晚上 7 點至晚上 8 點(印度)安排的 2022 年 Amazon ML 暑期學校測驗中提出的,我在完成測驗后問了這個問題,我很想知道答案,因為我的代碼無法正常作業。我為這個問題撰寫了上面的代碼,但它只通過了 4/10 的測驗用例,也沒有顯示錯誤,所以我對我的代碼的作業感到困惑。
uj5u.com熱心網友回復:
問題是您對串列進行排序,res但您不檢查每個解決方案是否按字典順序排序。
您的功能的微小變化(并且沒有類):
def solve(input2: str) -> str:
res = []
def rec(st1, st2, st3):
if not st1 and not st2:
res.append(st3[:])
return
if st1:
rec(st1[1:], st2 st1[0], st3)
if st2:
rec(st1, st2[:len(st2)-1], st3 st2[-1])
rec(input2, "", "")
print(res)
sorted_res = sorted(res)
print('sorted_res: ', sorted_res)
filtered_res = [x for x in res if x == ''.join(sorted(x))]
print('filtered_res: ', filtered_res)
給定示例solve(num),輸出為:
['mun', 'umn', 'unm', 'nmu', 'num']
sorted_res: ['mun', 'nmu', 'num', 'umn', 'unm']
filtered_res: []
這行代碼filtered_res = ...檢查串列中的每個字串是否按字典順序排列。你會在res[0]這里回傳錯誤的,因為mun沒有有效的答案。對于這個詞,沒有有效的答案(因為filtered_res是一個空串列,因為您的代碼確實遵循了正確的規則)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492565.html
上一篇:換行后在文本框中切片文本
