【发布时间】:2018-08-21 18:42:08
【问题描述】:
我正在解决 HackerRank 上的一个问题。它要求我查看是否可以通过执行k 操作将字符串s 转换为字符串t。
https://www.hackerrank.com/challenges/append-and-delete/problem
我们可以执行的操作是:在s 的末尾追加一个小写字母或从s 的末尾删除一个小写字母。例如,Ash Ashley 2 将返回 No,因为我们需要 3 个操作,而不是 2 个。
我尝试如下解决问题:
def appendAndDelete(s, t, k):
if len(s) > len(t):
maxs = [s,t]
else:
maxs = [t,s]
maximum = maxs[0]
minimum = maxs[1]
k -= len(maximum) - len(minimum)
substr = maximum[len(minimum): len(maximum)]
maximum = maximum.replace(substr, '')
i = 0
while i < len(maximum):
if maximum[i] != minimum[i]:
k -= (len(maximum)-i)*2
break
i += 1
if k < 0:
return 'No'
else:
return 'Yes'
但是,它在这个奇怪的测试用例中失败了。 y yu 2。预期的答案是No,但根据我的代码,它会返回Yes,因为只需要一个操作。有什么不明白的地方吗?
【问题讨论】:
-
你必须使用恰好 k 个操作。
-
继续执行编辑操作,直到您点击“k”。如果 i, j ( s, t 的索引) 处的字符不相等,将有两条路径:追加、删除 - 遍历每个路径,但跟踪您遍历的路径的长度。如果它等于 k 就不要再进一步了。如果在 k 之前的任何时候你可以获得相等的字符串,则返回 true。
-
实际上我收回“如果在 k 之前的任何时候你可以得到相等的字符串,返回 true。”检查树的第 k 层,如果字符串相等则返回 true,否则返回 false。
-
解释你的代码。
标签: string python-3.x algorithm logic