华为校招2019.04.10机试题 字符串按8拆分

本文介绍了华为2019年4月10日机试中的一道题目,要求对输入的字符串数组按长度8进行拆分,并对拆分后的字符串进行升序排序。对于长度不足8的字符串,需要在后面补0。作者强调了在有限时间内熟悉并利用Python内置函数的重要性,同时也指出该题曾在2016年9月的华为校招机试题中出现过,但增加了排序的要求。
  • 问题描述
        连续输入字符串(字符串个数为N,每个字符串长度不大于100),请按照长度为8拆分每个字符串后输出到新的字符串数组,输出的字符串按照升序排序。长度不足8整数倍的字符串请在后面补数字0,空字符串不处理。(输出字符串中的重复字符串不能删除)

  • 输入:2 abc 123456789

  • 输出:12345678 90000000 abc00000

s = list(input().split())
#S用来存储最终待排序的字符串
S = s.copy()
s_len = len(s)
#从第二个字符串开始遍历,进行拆分、补0操作
for i in range(1, s_len):
    #长度不足8
    if len(s[i])<8:
    	#保存s[i],方便后续从S中剔除
        temp = s[i]
        need_0 = 8 - len(s[i])
        for j in range(need_0):
            s[i]+='0'
        
        S.append(s[i])
        #删除S中不足8的那个字符串
        S.remove(temp)
    #长度大于8
    if len(s[i])>8:
        length = len(s[i])
        i_1 = 0
        j = 8
        #拆分
        while length>8:
            length-=8
            S.append(s[i][i_1:j])
            if length>8:
                i_1+=8
                j+=8    
        #剩余的最后一个不足8的字符串    
        new_s = s[i][j:len(s[i])]
        if len(new_s)<8:
            need_1 = 8-len(new_s)
            for k in range(need_1):
                new_s+='0'
        S.append(new_s)
        #删除那个长度大于8的字符串
        S.remove(s[i])
#去除无关字符串
S.remove(s[0])
#默认按照字典序
S.sort()
for i in range(len(S)):
    print(S[i], end=' ')

python的一些函数是挺好用的,比如这里的字符串按升序排列,自己写确实慢了点,尤其是像这样的限时考试,时间就是希望。 (私下里有时间可以自己实现,锻炼基本功)

总之要多多熟悉练习才是。


(刚刚发现,这个题在16年9月份的华为校招机试中出现过,输入数据都没变,区别是这次的题目加了字符串按升序排列的要求…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值