2016-11-20 74 views
0

我正在嘗試生成代碼以按順序字母順序返回輸入內的子字符串的數量。 即輸入:「abccbaabccba」 輸出:2輸入字符串中的字母順序字符串的返回數

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

def cake(x): 
    for i in range(len(x)): 
     for j in range (len(x)+1): 
      s = x[i:j+1] 
      l = 0 
      if s in alphabet: 
       l += 1 
    return l 

print (cake('abccbaabccba')) 

到目前爲止我的代碼將只返回1.基於測試我在它做,現在看來,這只是返回1,如果有信件中輸入。有沒有人看到我要去哪裏錯了?

回答

0

您每次都會得到輸出1,因爲您的代碼會將的計數重置爲l = 0,而每個都會通過該循環。

如果您解決了這個問題,您將得到答案96,因爲您在空字符串中包含大量冗餘檢查('' in alphabet返回True)。

如果您修復,您將得到17,因爲您的測試字符串包含長度爲1和2的子字符串,以及3+,也是字母表的子字符串。因此,您的代碼需要考慮您想要考慮的最小子字符串長度 - 我認爲這是3:

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

def cake(x, minLength=3): 
    l = 0 
    for i in range(len(x)): 
     for j in range(i+minLength, len(x)): # carefully specify both the start and end values of the loop that determines where your substring will end 
      s = x[i:j] 
      if s in alphabet: 
       print(repr(s)) 
       l += 1 
    return l 

print (cake('abccbaabccba')) 
相關問題