Python 3.x 如何在python中获取按字母顺序排列的最长子字符串
我试图编写一个函数,返回字母按字母顺序排列的s的最长子字符串。例如,如果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='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