zoukankan      html  css  js  c++  java
  • (华为机试题)字符串-字符串排序

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

  • 相关阅读:
    论文摘记 2017.4.6-4.9
    P4 PI库安装
    Markdown中的表格
    Easy install ryu
    《重构网络-SDN架构与实现》阅读随笔
    解决Github Desktop Repo publish 失败问题
    解决 "OperationalError: (sqlite3.OperationalError) no such table: ..."问题
    初始化 Flask 虚拟环境 命令
    Flask: socket.error: [Errno 48] Address already in use 问题
    【转】TCP端口号记录
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13509418.html
Copyright © 2011-2022 走看看