天天看點

牛客網---字元串-字元串排序

編寫一個程式,将輸入字元串中的字元按如下規則排序(一個測試用例可能包含多組資料,請注意處理)。

規則 1 :英文字母從 A 到 Z 排列,不區分大小寫。

如,輸入: Type 輸出: epTy

規則 2 :同一個英文字母的大小寫同時存在時,按照輸入順序排列。

如,輸入: BabA 輸出: aABb

規則 3 :非英文字母的其它字元保持原來的位置。

如,輸入: By?e 輸出: Be?y

樣例:

輸入:

A Famous Saying: Much Ado About Nothing(2012/8).

輸出:

A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).

示例1

輸入

A Famous Saying: Much Ado About Nothing (2012/8).

輸出

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
def f(s):
    a, L = [], len(s)
    for i in range(L):
        if s[i].isalpha():   #判斷是否為字母
            a.append((s[i], s[i].lower(), i))   #在清單中添加小清單(這個元素,以及小寫,和位置)
    b = sorted(a, key=lambda x:(x[1], x[2], x[0]))  #lanbda是匿名函數,x是參數,冒号後邊是表達式,#這個的意思是以key函數的順序排序,也就是先緊着第二個的順序排序,然後是第三個,第一個重要性最低。注意的是,原清單中的元素順序不變
    result = ''
    for i in xrange(L):
        if s[i].isalpha():
            result += b[0][0]
            del b[0]    #删除這個元素,後邊的元素依次往前進1
        else:
            result += s[i]
    return result
      
try:
    while 1:
        print f(raw_input())
except:
    pass