2016-10-26 11 views
0

カンガルー語は、任意の文字を入れ替えずに別の単語を含む単語を指します。たとえば、勇気にはコグ、カー、コアなどが含まれますが、実行できません。最初の文字列が2番目のカンガルー語かどうかを確認します。ここで Pythonでカンガルー語を確認する

は私のコードです

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) 
ls=len(s1l) 
for i in range(ls): 
    for j in range(ls): 
     for k in range(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')  

しかし、S1 =戦車用などoutput.For希望を取得するイムことができないとs2 =答えは誰かが何を説明してくださいfalse.Canであるのに対し、私のコードは、真を示すラット私は間違いを作った?

答えて

1

あなたの質問のほかに、あなたは多少の違いがありますので、私はそれらの束についてコメントします。

しかし、あなたの主な問題は、あなたがij、および文字のすべての上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') 

これを行います。すべての長さのサブワードを見つけるようにするには、少し注意深くする必要があります。

+0

ありがとうございます。エックルズ –

関連する問題