题解 | #字符串排序#

字符串排序

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

该题开始的时候组做错了,没有考虑比较字母大小的时候直接插入会导致特殊字符的位置变动,
解题思路是先将字符串中的大小写字母筛选出来存储数组1,除此之外的存入数组2,数组2 需要记录特殊字符和其位置,对数组1进行排序后,将数组2的字符相继插入数组1,然后进行输出,这样特殊字符的位置就不会改变了
list1=[]
def numletter(i):
    if i >='a' and i<='z':
        return ord(i)-ord('a')+1
    if i >='A' and i<='Z':
        return ord(i)-ord('A')+1
while True:
    try:
        str1=input()
#         print(s)
        s=[]
        str2=[]
        for i in range(len(str1)):
            if (str1[i]>='a' and str1[i]<='z') or (str1[i]>='A' and str1[i]<='Z'):
                s.append(str1[i])
            else:
                str2.append([str1[i],i])
        listtemp=[]
        listtemp.append(s[0])
        for i in range(1,len(s)):
            flag=0
            if (s[i] >='a' and s[i]<='z') or (s[i] >='A' and s[i]<='Z'):
                for j in range(len(listtemp)):
                    if (listtemp[j] >='a' and listtemp[j]<='z') or (listtemp[j] >='A' and listtemp[j]<='Z'):
                        if numletter(s[i])<numletter(listtemp[j]):
                            flag=1
                            listtemp.insert(j,s[i])
                            break
                    else:
                        continue
                if flag==0:
                    listtemp.append(s[i])
#             print(listtemp)
        if len(str2)!=0:
            for i in str2:
                listtemp.insert(i[1], i[0])
        print(''.join(listtemp))
        list1.append(''.join(listtemp))
    except:
        break
# for i in list1:
#     print(i)

全部评论

相关推荐

03-26 22:55
门头沟学院 Java
烤冷面在迎接:河南byd,应该就是郑大了。不过24届计算机是特殊情况,那年除了九✌和强2,以及两三个关系够硬的双非,其他的都是炮灰,感觉是十几年来互联网行业最烂的一年,如果想了解最新的就业情况,得找现在的大四。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务