Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x 如何在python中获取按字母顺序排列的最长子字符串_Python 3.x_Alphabetical Sort - Fatal编程技术网

Python 3.x 如何在python中获取按字母顺序排列的最长子字符串

Python 3.x 如何在python中获取按字母顺序排列的最长子字符串,python-3.x,alphabetical-sort,Python 3.x,Alphabetical Sort,我试图编写一个函数,返回字母按字母顺序排列的s的最长子字符串。例如,如果s='azcbobobegbegghakl',则函数应返回'beggh' 这是我的函数,它仍然不完整,但它不返回子列表; 返回错误为: “索引器:字符串索引超出范围” def最长_子字符串: sub=[] 对于范围内的i(透镜-1): subs=s[i] 计数器=i+1 虽然ord(s[i])不是最优的(工作在线性时间O(n)),但我对您的代码做了一些修改(在Python 3中): 修改: 您将字符与固定位置进行比较,即在

我试图编写一个函数,返回字母按字母顺序排列的s的最长子字符串。例如,如果
s='azcbobobegbegghakl'
,则函数应返回'beggh'

这是我的函数,它仍然不完整,但它不返回子列表; 返回错误为:

“索引器:字符串索引超出范围”

def最长_子字符串:
sub=[]
对于范围内的i(透镜-1):
subs=s[i]
计数器=i+1
虽然ord(s[i])不是最优的(工作在线性时间
O(n)
),但我对您的代码做了一些修改(在Python 3中):

修改:

  • 您将字符与固定位置进行比较,即在
    循环中,您仅递增
    计数器
    而不是
    i
    ,因此i递增 第I个位置也是。(因此我们避免检查已经检查过的字符,所以它在线性时间
    O(n)
    我想…)

  • 此外,如果
    计数器
    超过
    长度
    ,您仅检查小于条件
    ,而ord(s[i])?在
    while
    循环中,我认为您的案例在此输入中失败:
    acdb
    ,因为您试图将所有剩余字符与第一个字符
    a
    进行比较,所以它给出的答案是
    acdb
    ,这是错误的。。答案应该是
    acd
    我认为..@cricket\u 007实际上是不对的。。。子序列可以跳过元素!这部分代码是做什么的?:如果len(sub)s='a'
    @a.e。
    def longest_substring(s):
        sub=[]
        for i in range (len(s)-1):
            subs=s[i]
            counter=i+1
            while ord(s[i])<ord(s[counter]):
                subs+=s[counter] 
                counter+=1
            sub.append(subs)
        return sub
    
    def longest_substring(s):
        length = len(s)
        if length == 0 :         # Empty string
            return s
        final = s[0]
        for i in range (length-1):
            current = s[i]
            counter = i+1
            while counter < length and ord(s[i]) <= ord(s[counter]):  
                current += s[counter] 
                counter +=1
                i+=1
            if len(final) < len(current):
                final = current
        return final
    s = 'azcbobobegghakl'
    print(longest_substring(s))
    
    beggh
    
    s = 'acdb'
    
    acd