我在这里发现了这个问题,但无法发表评论或提问,所以我正在创建一个新问题。
原帖如下:
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?
答案 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']
这有助于说明循环中发生了什么吗?