字符串合并处理

字符串合并处理

http://www.nowcoder.com/questionTerminal/d3d8e23870584782b3dd48f26cb39c8f


题目中有几个没交代清楚的:
1.只用处理0-9和a-f 的字符,除此之外不用处理直接添加
2.如果转换为2进制后不够4位,需要末尾补零。
处理过程:
1.合并两字符串
2.按奇,偶位分别排序
3.再合并字符串
4.处理转换并返回
    4.1为节省时间0不用转
    4.2  16进制转2进制并反转
    4.3  不够4位要末尾补零
    4.4 再转换回去
    4.5 拼接

def translate(org_str):
    trans_str = ''
    append = '0000'
    for i in org_str:
        #优化,为零的话不用处理
        if i == '0' : 
            trans_str += i
            continue
        #只用转换0-9和a-f的字符
        if i.isdigit() or (i.isalpha() and i.upper()<'G'):
            #16进制转2进制并反转字符
            trch = str(bin(int(i,16)))[:1:-1]
            #不够4位要补零
            if len(trch)<4 :
                trch += append[:4-len(trch)]
            #2进制转16进制并大写
            trans_str += str(hex(int(trch,2)))[2::].upper()
        else :
            trans_str += i
    return trans_str

while True:
    try:
        #获取字符串
        string = "".join(input().split())
        #按奇数位和偶数位分开字符串并排序
        a = sorted(string[::2])
        b = sorted(string[1::2])
        org_str = ''
        i = 0
        #合并字符串,只会有a串长于b串的情况,或者两串长度相等
        for i in range(len(a)):
            if i >= len(b):
                 org_str += a[i]
                 break
            else :
                org_str += a[i]+b[i]
                i+=1
        print(translate(org_str))
    except:
        break


全部评论
写的真好,思路清晰
1 回复 分享
发布于 2021-07-25 15:18
2没交代清楚还好,一般都会考虑到。1没说清输入合法性,以及非法输入要不要处理,实际上这题非常坑爹。他没说我必须要处理F以外的输入。那我要不要处理输入字符是空字符串情况,要不要处理只输入了1组字符串的情况,要不要自己测试处理所有非法输入情况?
1 回复 分享
发布于 2021-12-01 11:02

相关推荐

不愿透露姓名的神秘牛友
11-20 19:57
已编辑
某大厂 golang工程师 23.0k*16.0, 2k房补,年终大概率能拿到
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
SinyWu:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
13 3 评论
分享
牛客网
牛客企业服务