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

该博客介绍了一个Python程序,用于根据特定规则对输入字符串中的字符进行排序。规则包括:字母按A到Z顺序排列(不区分大小写),保持输入顺序处理相同字母的大小写,非字母字符保持原位。程序首先将所有字母提取并按原顺序拼接,然后遍历原字符串,按顺序替换为排序后的字符,并从拼接字符串中移除已使用的字符。该算法适用于多组测试数据,每行输入分别处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址

题目描述

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

规则 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值