题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

# 编写一个程序,将输入字符串中的字符按如下规则排序。
# 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
# 如,输入: Type 输出: epTy
# 规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
# 如,输入: BabA 输出: aABb
# 规则 3 :非英文字母的其它字符保持原来的位置。
# 如,输入: By?e 输出: Be?y
# 数据范围:输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000


# 解题思路:
# 首先,大写字母的ASCII码是要比小写字母的ASCII码要要的,
# 所以我们用大写字母的ASCII码规则排序,就不会产生字母大小写字母相同时,大写字母总在小写字母之前的情况
# 第二,标点符号这些非英文字母的字符,只要知道它在原字符串中的索引,然后按原索引将其值插入到排序之后的列表中
# 最后将列表转为字符串输出即可

str1 = input()

s = ''  # 存储排序后的子字符串

count = 0  # 计数,控制index方法的起始位置
for item in str1:
    # 遍历原字符串,判断每个字符是否是字母
    if item.isalpha():
        s += item
lst = sorted(s, key=str.upper)  # 排序,按“s字符串中的字母的大写”规则排序,返回一个列表
for item in str1:
    # 再次遍历原字符串,然后将不是字母的字符做插入处理
    if not item.isalpha():
        # index返回的是“匹配字符的第一个索引”,所以用count来控制匹配开始的位置,以保证当前字符的索引正确
        a = str1.index(item, count)  # 这一行也可以不用,写出来更好理解,因为count是从0开始的,这和a的值是一样的
        lst.insert(a, item)
    # 无论匹配结果怎么样,count都要+1,表示下一次的匹配从下一个字符开始
    count += 1
print(''.join(lst))

全部评论

相关推荐

11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务