2017-08-29 68 views
-1

我发现此问题发布在此处,但无法评论或提出问题,所以我创建了一个新问题。这段代码发生了什么。字符串作为字符串中的子字符串

原来的职位说明如下:

t = "abd" 
s = "abdc" 

小号平凡包含吨。然而,当你对它们进行排序时,你会得到字符串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?

+2

因为's_len - t_len + 1'子字符串中最多只能有't_len'。总而言之,在一个4字符的字符串中,每个字符串最多可以有2个子字符串。也就是说,前3个字符和后3个字符,“abd”和“bdc”。 – alvits

+4

这实际上是创建一个窗口的大小(len(t)),然后你滑过len(s)。即检查s中长度为len(t)的所有连续子串。在这个例子中,长度为3的2个子字符串。 –

+0

谢谢你帮助澄清事情。 – john

回答

0

alvitsd_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'] 

这是否有助于说明发生了什么事的循环?

+0

你完全误解了这个问题。 OP在问为什么“开始”使用这样一个范围。你甚至没有解释任何事情。你刚才提出了一个建议。这不是一个答案。这属于评论。 – alvits

+0

你已经解释了'start'的值;我应该参考一下。不幸的是,这不能发表评论,因为它不会格式化代码和输出。 – Prune

+0

嘿Prune谢谢你关于打印报告的例子。但是,你误解了被问到的问题。 – john