あなたは2つの文字列AAとBBが与えられます。 AAとBBの両方に表示される部分文字列 があるかどうかを調べます。効率的な方法でPythonの文字列を見つける
すべての文字列には、小文字のラテン文字のみが含まれています。
以上、a question from hackerranckが表示されます。私はそれを解決するには、次のプログラムを書いた:
T = int(raw_input())
for t in xrange(T):
s1 = raw_input()
s2 = raw_input()
length1 = len(s1)
length2 = len(s2)
checked = list()
if length1<length2:
for letter in s1:
if len(checked)== 26:
break
if letter in checked:
next
checked.append(letter)
if letter in s2:
print "YES"
break
else:
print "NO"
else:
for letter in s2:
if letter in checked:
next
if len(checked)==26:
break
checked.append(letter)
if letter in s1:
print "YES"
break
else:
print "NO"
それはif len(checked)==26: break
を追加する前に、正しい働いていました。この行を追加すると、各英字を1回だけチェックして、送信プロセスのタイムアウトエラーを取り除くことができますが、この行を追加すると、プログラムの答えはいくつかのテストケースで間違っています。どうして?
ありがとうございます。申し訳ありませんが、私はこれを持っていませんでした。サンプルコードを使用してセットについてもう少し説明してもらえますか、それについての記事を私に紹介してください。 – Abraham
@Abraham:https://docs.python.org/2/library/stdtypes.html#set-types-set-frozensetおよびhttps://wiki.python.org/moin/TimeComplexity; Pythonのリストは、要素が存在するかどうかをテストするためにO(N)時間かかるので、セットは一定の時間内にそれを実行できます。 –
@Abraham: 'checked = set()'はセットを作成し、 'checked.add(letter)'はそのセットに新しい文字を追加します。あなたがすでに手紙をテストしたので、 'チェックされた文字の場合:続行:continue'を実行してループをスキップします。 –