检查在python的袋鼠词

时间:2016-10-26 17:52:31

标签: string python-3.x loops combinatorics

袋鼠词是指一个单词中携带另一个单词但没有移调任何字母。例如,勇气包含cog,cur,core等但不运行,gen,gone.Given 2 string im试图检查第一个字符串袋鼠是第二个词。

这是我的代码

let size = CGSize(width: 30.0, height: 30.0)
let aspectScaledToFitImage = image.af_imageAspectScaled(toFit: size)

但是我无法获得所需的输出。例如对于s1 = chariot和s2 = rat我的代码显示为true而答案是假的。有人可以解释我犯了什么错误吗?

1 个答案:

答案 0 :(得分:1)

除了你的问题之外,还有很多你可以做的事情,所以我会对其中的一些进行评论。

但是,您的主要问题是,您要在所有字符上循环ijk,而不是将i < j < k限制为import sys s1=input().rstrip() s1l=[] for i in s1: s1l.append(i) s2=input().rstrip() s2l=[];sol=[] for i in s2: s2l.append(i) 总是如此。

import sys
s1=input().rstrip()
s2=input().rstrip()

s1l=[c for c in s1]
s2l=[c for c in s2]

sol=[]

这段代码可以更清晰地写成:

s2l

这更像是Pythonic和干净。但是,你从不使用import sys s1=input().rstrip() s2=input().rstrip() s1l=[c for c in s1] sol=[] ,为什么要这样做呢?

s1l

更好。但是你实际上可以索引到一个字符串而不将其放入列表中。你从未使用过s1,除了你可以用import sys s1=input().rstrip() s2=input().rstrip() sol=[] ls=len(s1) for i in range(ls): for j in range(ls): for k in range(ls): sol.append((s1[i]+s1[j]+s1[k])) 做的长度。

ls=len(s1)
for i in range(ls-2):
    for j in range(i+1, ls-1):
        for k in range(j+1, ls):
            sol.append((s1[i]+s1[j]+s1[k]))

这是您的主要问题所在。我会先按照您的方式修复它:

sol

但是,如果你已经知道它有一个袋鼠字,为什么还要继续建立一个可能的解决方案列表(ls=len(s1) for i in range(ls-2): for j in range(i+1, ls-1): for k in range(j+1, ls): sol.append((s1[i]+s1[j]+s1[k])) for i in sol: if i==s2: print('s1 is a kangaroo word of s2') sys.exit() print('s1 is Not a kangaroo word of s2') )?这是一个更好的解决方案。而不是:

ls=len(s1)
for i in range(ls-2):
    for j in range(i+1, ls-1):
        for k in range(j+1, ls):
            word = s1[i]+s1[j]+s1[k]
            if word == s2:
                print('s1 is a kangaroo word of s2')
                sys.exit()
print('s1 is Not a kangaroo word of s2')

这样做:

content

但是...... 这个解决方案只能找到长度为3的子词,而且还很麻烦。为了找到所有长度的子词,你必须要小心一点......