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