【问题标题】:Return number of alphabetical substrings within input string返回输入字符串中按字母顺序排列的子字符串数
【发布时间】:2016-11-20 20:54:51
【问题描述】:
我正在尝试生成代码以返回输入中按字母顺序排列的子字符串的数量。
即输入:'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。有谁知道我哪里出错了?
【问题讨论】:
标签:
string
python-2.7
python-3.x
substring
【解决方案1】:
您每次都得到输出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'))