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)

  • 相关阅读:
    box-sizing: border-box的作用
    什么时候用created,什么时候用mounted
    圣杯布局
    关闭浏览器 清除session
    js this
    js 深拷贝
    经常犯的一些小错误
    语法:c++对关于空指针0/NULL/nullptr三者的演变
    常用的函数
    C++一些小技巧
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13509418.html
Copyright © 2011-2022 走看看