(华为机试题)字符串-字符串排序

  • 题目描述
编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。

规则 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).
  • 解法

首先这道题要求的是排列英文字母,但是其他的字符不用管。那就只考虑对英文字母的排序,那么,我们就要想办法只按照ASCII码的顺序,只排序英文,然后将排序好的英文保存下载,再把除字母以外的字符插入到原始位置上,这不就得到排列后的string了吗。

这里需要注意一下,Python的isalpha()函数,它无输入参数,用于判断string是否只由一个或者多个字母组成,返回bool类型。

#coding=utf8
def sortStr(s):
    '''
    Args:
        s: input string: List type
    Returns: output string: List type

    '''
    outList = []
    for i in range(26): #这里则可以巧妙的将原始的string中的字母按照ACSII码排序了
        for chr in s:
            if ord(chr)-ord('A') == i or ord(chr) - ord('a') == i:
                outList.append(chr)
    for k in range(len(s)):
        if s[k].isalpha():
            continue
        else:
            outList.insert(k,s[k])
    return ''.join(outList)

if __name__ == "__main__":
    s = input()
    outlist = sortStr(list(s))
    print(outlist)

时间复杂度O(N)

空间复杂度O(N)

posted @ 2020-08-15 17:08  Yelush  阅读(681)  评论(0)    收藏  举报