【刷题】华为笔试面试机考 [HJ26] - 字符串排序

题目地址

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

如,输入: By?e 输出: Be?y

注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)

输入描述:

输入字符串

输出描述:

输出字符串

示例1

输入

A Famous Saying: Much Ado About Nothing (2012/8).

输出

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

解题思路

1、将字符串中所有的字母按照 原字符串 顺序取出,组成新的 拼接字符串
2、遍历 原字符串,将其中的每一个字母按照顺序替换为 拼接字符串 中的字符
3、替换之后,需要将 拼接字符串 中对应的字符移除掉

需要注意的是,同一个英文字母的大小写同时存在时,要按照输入顺序排列,所以,这里要特殊处理一下大小写字母的问题。

代码

  • Python 3
def func():
    s = input()
    
    dic = 'abcdefghijklmnopqrstuvwxyz'
    
    ns = ''
    for c in s:
        if 'a' <= c <= 'z' or 'A' <= c <= 'Z':
            ns = ns + c
    
    r = ''
    for c in s:
        if not ('a' <= c <= 'z' or 'A' <= c <= 'Z'):
            r = r + c
            continue
        for d in dic:
            ld = ns.find(d)
            ud = ns.find(d.upper())
            
            # 没有找到这个字符
            if ld == -1 and ud == -1:
                continue
            
            # 只找到小写字母,或者小写字母排序在前
            if ld < ud and ld != -1 or (ud == -1 and ld != -1):
                r = r + d
                ns = ns.replace(d, '', 1)
                break
            
            # 只找到大写字母,或者大写字母排序在前
            if ld > ud and ud != -1 or (ud != -1 and ld == -1):
                r = r + d.upper()
                ns = ns.replace(d.upper(), '', 1)
                break
    print(r)
            
        
while True:
    try:
        func()
    except:
        break
华为机试真题题库提供了100道算法题,并提供了正确解法和解题思路。这些题目是华为机试真题,大概率会考到原题。如果你有任何问题,可以在题库中留言进行交流和探讨。 华为机试一般有三道算法题,其中前两道属于简单或中等难度,分值为100分。第三道题目为中等或困难难度,分值为200分。总分为400分,答题时间为150分钟。过去通过150分即可,但现在分数要求可能有所提高。不管怎样,大家都要努力刷题,争取拿高分。分数越高,评级就越高,工资待遇也越高。一般工资待遇是15K~30K*14~16,非常可观。 此外,如果你对华为机试真题感兴趣,我还邀请你一同入驻我的博客。我的博客即将同步至腾讯云开发者社区,你可以在那里找到更多的资源和信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [华为OD机试真题2022(JavaScript)](https://blog.csdn.net/weixin_40767375/article/details/125276961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2023年华为笔试面试机考真题100道(C/C++语言)](https://blog.csdn.net/weixin_38815609/article/details/125658519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值