这个代码发生了什么。 Anagram作为字符串中的子字符串

时间:2017-08-29 22:58:15

标签: python algorithm anagram

我在这里发现了这个问题,但无法发表评论或提问,所以我正在创建一个新问题。

原帖如下:

t = "abd"
s = "abdc"

s包含t。但是,当您对它们进行排序时,会得到字符串abd和abcd,并且比较失败。排序中还有其他字母。

相反,你需要以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!!

在for循环中为什么他们采用S-len然后减去t_len?他们为什么最后加1?

1 个答案:

答案 0 :(得分:0)

alvits d_void 已经解释了start的值;我不会重复这一点。

我强烈建议您学习一些基本的跟踪调试。插入一些有用的 print 语句来执行。例如:

代码:

t = "goal"
s = "catalogue"

t_len = len(t)
s_len = len(s)
t_sort = sorted(t)
print "lengths & sorted", t_len, s_len, t_sort

for start in range(s_len - t_len + 1):
   chunk = s[start:start+t_len]
   print "LOOP start=", start, "\tchunk=", chunk, sorted(chunk)
   if t_sort == sorted(chunk):
      print "success"

输出:

lengths & sorted 4 9 ['a', 'g', 'l', 'o']
LOOP start= 0   chunk= cata ['a', 'a', 'c', 't']
LOOP start= 1   chunk= atal ['a', 'a', 'l', 't']
LOOP start= 2   chunk= talo ['a', 'l', 'o', 't']
LOOP start= 3   chunk= alog ['a', 'g', 'l', 'o']
success
LOOP start= 4   chunk= logu ['g', 'l', 'o', 'u']
LOOP start= 5   chunk= ogue ['e', 'g', 'o', 'u']

这有助于说明循环中发生了什么吗?