华为机试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

posted @ 2020-08-21 19:36  Andy_George  阅读(253)  评论(0编辑  收藏  举报