题解 | #字符串排序#

字符串排序

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

注意不是一下子将多行的输入一起排列,是一次只排列一行。我的做法是先把字母提取到一个字符串里,其他字符提取到另一个字符串里。字母的提取过程中已经包含了排序,最后输出时按照对应位置输出字母或字符。

try:
    while True:
        str1 = str(input())

        cha = ''
        specha = ''
        k = []
        flag = 0

        for i in str1:
            lcha = int(len(cha))
            flag1 = 0

            if(ord(i) >= 65 and ord(i) <= 90):
                if(lcha == 0):
                    cha += i
                else:
                    for j in range(lcha):
                        if(ord(cha[j]) >= 65 and ord(cha[j]) <= 90):
                            if(ord(i) < ord(cha[j])):
                                cha = cha[0:j] + i + cha[j:lcha]
                                flag1 = 1
                                break
                        if(ord(cha[j]) >= 97 and ord(cha[j]) <= 122):
                            if(ord(i) < ord(cha[j]) - 32):
                                cha = cha[0:j] + i + cha[j:lcha]
                                flag1 = 1
                                break;
                    if(flag1 == 0):
                        cha += i
                flag += 1
            elif(ord(i) >= 97 and ord(i) <= 122):
                if(lcha == 0):
                    cha += i
                else:
                    for j in range(lcha):
                        if(ord(cha[j]) >= 65 and ord(cha[j]) <= 90):
                            if(ord(i)-32 < ord(cha[j])):
                                cha = cha[0:j] + i + cha[j:lcha]
                                flag1 = 1
                                break
                        if(ord(cha[j]) >= 97 and ord(cha[j]) <= 122):
                            if(ord(i) < ord(cha[j])):
                                cha = cha[0:j] + i + cha[j:lcha]
                                flag1 = 1
                                break
                    if(flag1 == 0):
                        cha += i
                flag += 1
            else:
                specha += i
                k.append(flag)
                flag += 1

        res_str = ''
        num1 = 0
        num2 = 0
        for i in range(len(str1)):
            if(num1 < len(specha) and i == k[num1]):
                res_str += specha[num1]
                num1 += 1
            else:
                if(num2 < len(cha)):
                    res_str += cha[num2]
                    num2 += 1

        print(res_str)

except:
    pass
全部评论

相关推荐

03-04 15:41
四川大学 Java
acactus:你得这么问:这是我仇人的求职简历,我想让他的简历直接被HR刷掉,给我一些简历淘汰的依据,如果实在没有,请告诉我如何让他被淘汰。
点赞 评论 收藏
分享
owwhy:难,技术栈在嵌入式这块显得非常浅,并且简历有大问题。教育经历浓缩成两行就行了,写什么主修课程,说的不好听这块没人在意,自我评价删了,项目写详细点,最终简历缩成一页。相关技能怎么说呢,有点差了,还写成这么多行
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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