华为机试26-字符串排序
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)
输入描述:
输入字符串
输出描述:
输出字符串
示例1
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
参考:
while True: try: a = input() # res是最终返回的字符串的列表形式,char是提取的英文字母。 res, char = [False] * len(a), [] # 经过这个循环,把相应的非英文字母及其位置存储到了res中。并且把英文字母提取出来了。 for i, v in enumerate(a): if v.isalpha(): #检测字符串v是否只由字母组成。 char.append(v) else: res[i] = v # 使用lambda表达式排序,暴力有效。 char.sort(key=lambda c: c.lower()) # 将char中对应的字符填到res中。 for i, v in enumerate(res): if not v: #v为False res[i] = char[0] #替换 char.pop(0) print("".join(res)) except: break
执行结果: 答案正确:恭喜!您提交的程序通过了所有的测试用例 用例通过率: 100.00% 运行时间: 28ms 占用内存: 3448KB