字母排序 | HJ26 字符串排序

# 最优解
while True:
    try:
        string=input()
        temp=list(string)
        alphastring=[]#所有字母的列表
        for i in string:
            if i.isalpha():
                alphastring.append(i)
        alphastring.sort(key=str.upper)#将所有字母不论大小写排序,相同时保证之前输入的顺序不变
        j=0
        for i in range(len(temp)):
            if temp[i].isalpha():#对字母进行排序
                temp[i]=alphastring[j]
                j+=1
        print(''.join(temp))
    except:
        break

# 我的代码
while True:
    try:
        s = list(input())
        tmp_s = ''.join([ch for ch in s if ch.isalpha()])
        sort_s = ''
        for i in range(len(tmp_s)):
            min_tmp = tmp_s[i]
            min_indx = i
            for j in range(i + 1, len(tmp_s)):
                if tmp_s[j].isalpha() and tmp_s[j].lower() < min_tmp.lower() and \
                        tmp_s[j].lower() != min_tmp.lower():
                    min_tmp = tmp_s[j]
                    min_indx = j
            sort_s += min_tmp
            tmp_s = sort_s + tmp_s[i:min_indx] + tmp_s[min_indx + 1:]
        i, j = 0, 0
        start = 0
        res = []
        while i < len(s):
            j = i
            while j < len(s) and s[j].isalpha():
                j += 1
            res.append(sort_s[start:start+j-i])
            start = start+j-i
            if j < len(s):
                res.append(s[j])
            i = j + 1
        print(''.join(res))
    except:
        break

用时:2.5h

思路:1、提取所有字母单独排序;2、字母相同但大小写不同时,若需要按输入顺序排序,sort(key=lambda x:x.lower())全转小写且按原输入顺序排序;3、遍历原字符串,按照非字母位置构造新字符串

华为笔试刷题 文章被收录于专栏

高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107

全部评论

相关推荐

昨天 20:45
天津大学 C++
求问美团还有转正没开奖的吗
投递美团等公司10个岗位 >
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务