Python字计数器
我在学校学习Python 2.7课程,他们告诉我们创建以下程序: 假设s是一个小写字符字符串 编写一个程序,打印字母按字母顺序排列的s的最长子字符串 例如,如果s=azcbobegbegghakl,那么您的程序应该打印 按字母顺序排列的最长子字符串是:beggh 如果是领带,请打印第一个子字符串 例如,如果s='abcbcd',那么您的程序应该打印 按字母顺序排列的最长子字符串为:abc 我编写了以下代码:Python字计数器,python,string,python-2.7,Python,String,Python 2.7,我在学校学习Python 2.7课程,他们告诉我们创建以下程序: 假设s是一个小写字符字符串 编写一个程序,打印字母按字母顺序排列的s的最长子字符串 例如,如果s=azcbobegbegghakl,那么您的程序应该打印 按字母顺序排列的最长子字符串是:beggh 如果是领带,请打印第一个子字符串 例如,如果s='abcbcd',那么您的程序应该打印 按字母顺序排列的最长子字符串为:abc 我编写了以下代码: s = 'czqriqfsqteavw' string = '' tempIndex
s = 'czqriqfsqteavw'
string = ''
tempIndex = 0
prev = ''
curr = ''
index = 0
while index < len(s):
curr = s[index]
if index != 0:
if curr < prev:
if len(s[tempIndex:index]) > len(string):
string = s[tempIndex:index]
tempIndex=index
elif index == len(s)-1:
if len(s[tempIndex:index]) > len(string):
string = s[tempIndex:index+1]
prev = curr
index += 1
print 'Longest substring in alphabetical order is: ' + string
除最后一个问题外,所有这些问题都能很好地解决,并得出以下答案:
按字母顺序排列的最长子字符串为:cz
但它应该说:
按字母顺序排列的最长子字符串为:avw
我对代码检查了一千遍,没有发现错误。你能帮我一下吗?这几行:
if len(s[tempIndex:index]) > len(string):
string = s[tempIndex:index+1]
彼此不同意。如果新的最佳字符串是s[tempIndex:index+1]
,则应在If条件下比较该字符串的长度。将它们更改为彼此一致可以解决此问题:
if len(s[tempIndex:index+1]) > len(string):
string = s[tempIndex:index+1]
我看到user5402很好地回答了您的问题,但这个问题引起了我的兴趣,所以我决定重新编写您的代码。:)下面的程序使用了与您的代码基本相同的逻辑,只是做了一些小的更改 在实际情况下避免使用索引,并直接迭代字符串(或其他容器对象)的内容,这被认为是更具python风格的。这通常使代码更易于阅读,因为我们不必同时跟踪索引和内容 为了访问字符串中的当前字符和上一个字符,我们将输入字符串的两个副本压缩在一起,其中一个副本通过在开始处插入空格字符进行偏移。我们还将一个空格字符附加到另一个副本的末尾,这样当最长的有序子序列出现在输入字符串的末尾时,就不必进行特殊处理
#/usr/bin/env python
''查找给定字符串的最长有序子字符串
从…起http://stackoverflow.com/q/27937076/4014959
由PM 2Ring 2015.01.14编写
'''
数据=[
“Azcbobeberghakl”,
“abcbcd”,
“onyixlstmpylw”,
“pdxukpsimdj”,
“yamcrzwwgquqqrpdxmgltap”,
“dkaimdoviquyazmojtex”,
“abcdefghijklmnopqrstuvxyz”,
“evyeorezmslyn”,
“msbprjtwwnb”,
“laymbsbkrprvyuaieitpwpup”,
“munifxzwieqbhaymkeol”,
“lzasroxnpjqhmpr”,
“evjeewybqpc”,
“vzpdfwbbwxpxsdpfak”,
“ZYXWVUTSRQPONLKJIHGFEDCBA”,
“vzpdfwbbwxpxsdpfak”,
“jlgpirth”,
“czqriqfsqteavw”,
]
def最长(s):
''返回s的最长有序子字符串
s仅由小写字母组成。
'''
已找到,临时=[],[]
对于上一个,邮政编码中的货币(“”+s,s+“”):
如果当前值<上一个值:
如果len(温度)>len(找到):
found=temp[:]
温度=[]
温度+=[当前值]
返回“”。加入(已找到)
def main():
msg='按字母顺序排列的最长子字符串为:'
对于数据中的s:
印刷品
打印消息,最长(s)
打印
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
输出
azcbobeghakl
按字母顺序排列的最长子字符串是:beggh
abcbcd
按字母顺序排列的最长子字符串为:abc
onyixlstmpylw
按字母顺序排列的最长子字符串为:lstt
pdxukpsimdj
按字母顺序排列的最长子字符串为:kps
yamcrzwwgquqqrpdxmgltap
按字母顺序排列的最长子字符串为:crz
dkaimdoviquyazmojtex
按字母顺序排列的最长子字符串是:iqy
abcdefghijklmnopqrstuvwxyz
按字母顺序排列的最长子字符串是:abcdefghijklmnopqrstuvwxyz
埃夫耶奥雷兹姆斯林
按字母顺序排列的最长子字符串为:evy
msbprjtwwnb
按字母顺序排列的最长子字符串是:jtww
laymbskrprvyuaieitpwpup
按字母顺序排列的最长子字符串为:prvy
munifxzwieqbhaymkeol
按字母顺序排列的最长子字符串为:fxz
lzasroxnpjqhmpr
按字母顺序排列的最长子字符串为:hmpr
evjeewybqpc
按字母顺序排列的最长子字符串是:eewy
vzpdfwbbwxpxsdpfak
按字母顺序排列的最长子字符串为:bbwx
ZYXWVUTSRQPONLKJIHGFEDCBA
按字母顺序排列的最长子字符串为:z
vzpdfwbbwxpxsdpfak
按字母顺序排列的最长子字符串为:bbwx
jlgpirth
按字母顺序排列的最长子字符串为:iprt
czqriqfsqteavw
按字母顺序排列的最长子字符串为:avw
索引是你的朋友。
下面是解决该问题的简单代码
longword = ''
for x in range(len(s)-1):
for y in range(len(s)+1):
word = s[x:y]
if word == ''.join(sorted(word)):
if len(word) > len(longword):
longword = word
print ('Longest substring in alphabetical order is: '+ longword)
我自己也遇到过这个问题,我想我会分享我的答案 我的解决方案在100%的时间内都有效 问题是帮助新的Python程序员理解循环,而不必深入研究其他复杂的解决方案。这段代码比较平淡,并且使用变量名来方便新的编码人员阅读 我添加了注释来解释代码步骤。没有评论,它是非常干净和可读性
s = 'czqriqfsqteavw'
test_char = s[0]
temp_str = str('')
longest_str = str('')
for character in s:
if temp_str == "": # if empty = we are working with a new string
temp_str += character # assign first char to temp_str
longest_str = test_char # it will be the longest_str for now
elif character >= test_char[-1]: # compare each char to the previously stored test_char
temp_str += character # add char to temp_str
test_char = character # change the test_char to the 'for' looping char
if len(temp_str) > len(longest_str): # test if temp_char stores the longest found string
longest_str = temp_str # if yes, assign to longest_str
else:
test_char = character # DONT SWAP THESE TWO LINES.
temp_str = test_char # OR IT WILL NOT WORK.
print("Longest substring in alphabetical order is: {}".format(longest_str))
我的解决方案与nimj的类似,但它执行的迭代次数较少
res = ""
for n in range(len(s)):
for i in range(1, len(s)-n+1):
if list(s[n:n+i]) == sorted(s[n:n+i]):
if len(list(s[n:n+i])) > len(res):
res = s[n:n+i]
print("Longest substring in alphabetical order is:", res)
“我必须在下周一把这封信交给老师。”。这并不紧急“星期一到期”表示“星期一完成”。另请参见和