美团2020算法工程师编程题--字符串排序

题目描述:

生活中经常有需要将多个字符串进行排序的需要,比如将美团点评的部分业务名称(外卖、打车、旅游、丽人、美食、结婚、旅游景点、教培、门票、酒店),用拼音表示之后按字母逆序排序。字母逆序指从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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值