EDIT:これは非常に有用なスレッドであったため、最終的な解決策を投稿しました。以下の両方の答えのアドバイスを使用して、私は解決策を作ることができました。私はアナグラムを定義したヘルパー関数を追加しました。ここに私の最終的な解決策である:Python 2.7ある文字列のアナグラムが別の文字列の部分文字列であるかどうかを調べる
def anagram(s1, s2):
s1 = list(s1)
s2 = list(s2)
s1.sort()
s2.sort()
return s1 == s2
def Question1(t, s):
t_len = len(t)
s_len = len(s)
t_sort = sorted(t)
for start in range(s_len - t_len + 1):
if anagram(s[start: start+t_len], t):
return True
return False
print Question1("app", "paple")
私はいくつかの練習の技術的なインタビューの質問に取り組んでいると私は、次の質問にこだわっている:私は次のように働いている
Find whether an anagram of string t is a substring of s
私のコードの2つの変種、そして私はこの2つの間のクロスにあると信じています。私が抱えている問題は、入力にかかわらず、最初のコードは常にFalse.
を出力するということです。 2つ目のバリエーションはある程度機能します。ただし、個々の文字をソートすることはできません。私はこの二つの間にある解決策があると信じているが、私はどのように考え出すのトラブルを抱えている
def Question1():
# Define strings as raw user input.
t = raw_input("Enter phrase t:")
s = raw_input("Enter phrase s:")
# use a loop to find if t is in s.
if t.lower() in s.lower():
print("True!")
else:
print("False.")
Question1()
:印刷されますたとえばt=jks s=jksd
についてTrue!
しかしt=kjs s=jksd
はFalse.
def Question1():
# Define strings as raw user input.
t = raw_input("Enter phrase t:")
s = raw_input("Enter phrase s:")
# Use the sorted function to find if t in s
if sorted(t.lower()) in sorted(s.lower()):
print("True!")
else:
print("False.")
Question1()
ワーキング・バリアントを印刷しますこの状況でsorted
を使用してください。
あなたはtのすべての文字の組み合わせを取得してsと照合する必要があります。 sを並べ替えるのは正しいことではありません。 – Shiping