题解 | 字符串排序

字符串排序

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

注意点:

  1. 排序后大小写需要保持一致,也就是说需要一个稳定排序算法
  2. 大小写仅对稳定排序算法有需求,因此在排序的时候直接标记为相同的值即可(但是需要有一个标记来指定他是大写还是小写)

这里直接用一个类控制字符的状态,包括排序值(rank_num)、原字符(ori_char),其实num和upper没啥用,之前想着用这个状态做判断,后来想想不如直接用一个值记录他的rank值算了。

import sys

class TmpChr:
    def __init__(self, ori_char):
        self.ori_char = ori_char
        self.num = ord(ori_char)
        self.upper = 65 <= self.num <= 90
        self.rank_num = ord(ori_char) if self.upper else ord(ori_char)-32

for line in sys.stdin:
    if line[-1] == "\n":
        a = line[:-1]
    else:
        a = line
    result_list = []
    sort_list = []
    index_list = []
    for idx, each in enumerate(a):
        if 65 <= ord(each) <= 90 or 97 <= ord(each) <= 122:
            sort_list.append(TmpChr(each))
            index_list.append(idx)
        result_list.append(each)
    sorted_list = sorted(sort_list, key=lambda x:x.rank_num)
    for idx, each in zip(index_list, sorted_list):
        result_list[idx] = each.ori_char
    print("".join(result_list))

    
    

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务