题目描述:
生活中经常有需要将多个字符串进行排序的需要,比如将美团点评的部分业务名称(外卖、打车、旅游、丽人、美食、结婚、旅游景点、教培、门票、酒店),用拼音表示之后按字母逆序排序。字母逆序指从z到a排序,比如对两个字符串排序时,先比较第一个字母按字母逆序排z在a的前面,当第一个字母一样时再比较第二个字母按字母逆序排,以此类推。特殊情况1)空字符串需排在最前面;2)若一个短字符串是另一个长字符串的前缀则短字符串排在前面。请自行实现代码进行排序,直接调用sort等排序方法将不得分且视为作弊。
输入输出描述:
输入描述:
输入为一行,由多个字符串以英文逗号拼接而成,最多不超过128个字符串且可能有重复。每个字符串由小写字母a-z组成,可以为空,最长不超过128个字符。
输出描述:
输出一行,为排序之后的字符串,用逗号隔开
输出输出示例:
输入示例:
waimai,dache,lvyou,liren,meishi,jiehun,lvyoujingdian,jiaopei,menpiao,jiudian
输出示例:
waimai,menpiao,meishi,lvyou,lvyoujingdian,liren,jiudian,jiehun,jiaopei,dache
题目分析:
题目还是有一定难度的,排序问题,关键点有两个:
1.用什么策略进行排序,冒泡、中值排序、快速排序、堆排序等
2.排序过程中要实现对连个元素的比较,这个比较的功能如何实现,对于简单的数字排序,直接用>,<,=即可,但是对于字符串,这些逻辑功能可能并不好用,因此需要自己实现比较函数
关键:python中可以直接使用<,>,=对字符串进行排序,因此,可以使用简单的冒泡排序算法实现
python实现代码:
import sys
import re
line = sys.stdin.readline().strip() # 注意要用strip()跳过输入中开头和结尾的空格或者换行符,否则输出会受到影响
line = line.split(',')
for i in range(len(line)):
for j in range(i+1, len(line)):
if line[i] < line[j]:
line[i], line[j] = line[j], line[i]
if re.match(line[j], line[i]):
line[i], line[j] = line[j], line[i]
for i in range(len(line)-1):
if line[i] == '':
for j in range(i, 0, -1):
line[j] = line[j-1]
line[0] = ''
# line.remove(line[i]) #可替换上一个for循环
# line.insert('')
res = ','.join(line)
print(res)