あなたの質問のほかに、あなたは多少の違いがありますので、私はそれらの束についてコメントします。
しかし、あなたの主な問題は、あなたがi
、j
、および文字のすべての上k
をループするのではなく、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=[]
これは、はるかにPython的かつクリーンです。しかし、s2l
を使用することはありません。
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
に)可能な解決策のリストを構築し続ける:私が最初にそれをあなたがそれを持っている方法を修正しますか?ここでは、より良い修正があります。これに代えて:このソリューションは唯一の長さ3のサブ言葉を見つけ、まだかなり厄介です
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')
しかし...:
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')
これを行います。すべての長さのサブワードを見つけるようにするには、少し注意深くする必要があります。
ありがとうございます。エックルズ –