Python2.7查找一个字符串的某个字符是否是另一个字符串的子字符串

Python2.7查找一个字符串的某个字符是否是另一个字符串的子字符串,python,python-2.7,boolean,anagram,Python,Python 2.7,Boolean,Anagram,编辑:发布我的最终解决方案,因为这是一个非常有用的线程,我想给它添加一些定论。根据下面两个答案的建议,我能够设计出一个解决方案。我添加了一个助手函数,其中定义了一个字谜。以下是我的最终解决方案: 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_

编辑:发布我的最终解决方案,因为这是一个非常有用的线程,我想给它添加一些定论。根据下面两个答案的建议,我能够设计出一个解决方案。我添加了一个助手函数,其中定义了一个字谜。以下是我的最终解决方案:

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")

我正在练习一些技术面试问题,我被以下问题困住了:

查找字符串t的字谜是否是s的子字符串

我已经计算出了我的代码的以下两个变体,我相信解决这个问题的方法在于两者之间的交叉。我遇到的问题是,第一个代码总是打印
False.
,而不考虑输入。第二种变体在某种程度上起作用。但是,它不能对单个字母进行排序。例如
t=jks=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()
工作变量:

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()

我相信在这两者之间有一个解决方案,但我很难弄清楚在这种情况下如何使用
sorted

我认为您的问题在于“子字符串”需求。如果你排序,你就破坏了秩序。这意味着,虽然您可以确定string1的一个字谜是string2的一个子串的一个字谜,但在您实际按顺序处理string2之前,您不会得到正确的答案

我建议迭代
len(s1)
s2
长度的所有子字符串。这是一个简单的for循环。一旦有了子字符串,就可以将它们(排序与排序)与
s1
进行比较,以确定是否对
s1
进行了任何重新排列,从而生成一个连续的
s2
子字符串

即:


你走得很对。首先,请注意在第二次尝试中没有循环

问题是,您不能简单地对所有的s进行排序,然后在其中查找排序(t)。相反,必须考虑S的每个Le(t)大小子串,并检查排序后的T。考虑下面的小例子:

t = "abd"
s = "abdc"
s通常包含t。但是,当您对它们进行排序时,会得到字符串abdabcd,并且中的比较失败。排序过程中会遇到其他字母

相反,您需要在t大小的块中单步执行s

t_len = len(t)
s_len = len(s)
t_sort = sorted(t)
for start in range(s_len - t_len + 1):
   chunk = s[start:start+t_len]
   if t_sort == sorted(chunk):
       # SUCCESS!!

显然有一个正确的方法…;-)这是很好的解释,非常感谢你为我简化了这个。我将此标记为此问题的答案,再次感谢您的帮助。很高兴能提供帮助。你可以追溯证明我在教书时得到的报酬。:-)你需要得到t中所有字符的组合,并对照s检查它们。对s进行排序是不对的。我只想说,这两个答案都非常有用,很难只选择一个正确的答案。有没有办法选择两个答案?对stack overflowNope来说是相当新的。只需选择“最有用”的一个(可能是你首先读到的),然后继续。到处都是业力。。。
t_len = len(t)
s_len = len(s)
t_sort = sorted(t)
for start in range(s_len - t_len + 1):
   chunk = s[start:start+t_len]
   if t_sort == sorted(chunk):
       # SUCCESS!!