铁丝网

互相联通的梦境

0%

用Python求一个字符串中最长字典序不下降的子序列

今天上edX上的公开课的时候做到了这道题,觉得十分有趣。


Assume s is a string of lower case characters.

Write a program that prints the longest substring of s in which the letters occur in alphabetical order. For example, if s = ‘azcbobobegghakl’, then your program should print

“Longest substring in alphabetical order is: beggh”

In the case of ties, print the first substring. For example, if s = ‘abcbcd’, then your program should print

“Longest substring in alphabetical order is: abc”


当然这其实只是个入门Python语言的题而已,不过毕竟是目前最难的一道,所以还是很兴奋的。

要点就是,Python里面的字符可以直接比较大小

顺便,按照这个课里面提交程序的惯例,s都是不定义的(测试的时候会加一句定义,类似于直接输入一个数据了吧)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
prev = 'a'
fstar = True
cursn = 0
lonsn = 0
curstr = ''
lonstr = ''
for x in s:
if fstar == True or x >= prev:
print(x,prev)
fstar = False
cursn += 1
curstr += x
if cursn > lonsn:
lonsn = cursn
lonstr = curstr
else:
fstar = False
curstr = x
cursn = 1
prev = x
print('Longest substring in alphabetical order is: ',lonstr)