注意点:
- 排序后大小写需要保持一致,也就是说需要一个稳定排序算法
- 大小写仅对稳定排序算法有需求,因此在排序的时候直接标记为相同的值即可(但是需要有一个标记来指定他是大写还是小写)
这里直接用一个类控制字符的状态,包括排序值(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))



京公网安备 11010502036488号