Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字计数器_Python_String_Python 2.7 - Fatal编程技术网

Python字计数器

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

我在学校学习Python 2.7课程,他们告诉我们创建以下程序:

假设s是一个小写字符字符串

编写一个程序,打印字母按字母顺序排列的s的最长子字符串

例如,如果s=azcbobegbegghakl,那么您的程序应该打印

按字母顺序排列的最长子字符串是:beggh

如果是领带,请打印第一个子字符串

例如,如果s='abcbcd',那么您的程序应该打印

按字母顺序排列的最长子字符串为:abc

我编写了以下代码:

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)

“我必须在下周一把这封信交给老师。”。这并不紧急“星期一到期”表示“星期一完成”。另请参见和