小T的密码变换规则(青训营X豆包MarsCode) | 豆包MarsCode AI 刷题

问题描述

小T设计了一套密码变换规则,将输入的字符串转换成一串数字密码。变换规则如下:

  1. 小写字母按以下映射关系进行转换:
  • a, b, c -> 2
  • d, e, f -> 3
  • g, h, i -> 4
  • j, k, l -> 5
  • m, n, o -> 6
  • p, q, r, s -> 7
  • t, u, v -> 8
  • w, x, y, z -> 9
  1. 大写字母先转为小写字母,再跳到字母表中的前一个字母,并按上述规则转换为对应的数字。例如,B 转换为 a,再转换为 2A 特殊处理,先变为 Z,再转换为 9
  2. 非字母字符保持不变。

例如:对于输入字符串 "LIming0701",转换后的数字密码为 5464640701


测试样例

样例1:

输入:s = "LIming0701"

输出:'5464640701'

样例2:

输入:s = "PassW0rd"

输出:'62778073'

样例3:

输入:s = "helloWORLD123"

输出:'4355686752123'


解题思路

  1. 构建映射:首先需要构建一个小写字母到数字的映射表。
  2. 字符处理:遍历输入字符串的每个字符,判断其是否为字母。如果是字母,进一步判断是大写还是小写,然后按照规则进行转换。
  3. 结果拼接:将转换后的字符或未变化的非字母字符拼接成最终的结果字符串。

Python实现

下面是一个使用Python实现的完整解决方案:

python 复制代码
def transform_password(s):
    # 字母到数字的映射
    letter_to_num = {
        'abc': '2', 'def': '3', 'ghi': '4',
        'jkl': '5', 'mno': '6', 'pqrs': '7',
        'tuv': '8', 'wxyz': '9'
    }
    
    # 结果列表
    result = []
    
    # 遍历字符串中的每个字符
    for char in s:
        if char.isalpha():  # 判断是否为字母
            # 大写字母处理
            if char.isupper():
                # A 特殊处理
                if char.lower() == 'a':
                    lower_char = 'z'
                else:
                    lower_char = chr(ord(char.lower()) - 1)
            else:
                lower_char = char
            
            # 根据映射表找到对应的数字
            for letters, num in letter_to_num.items():
                if lower_char in letters:
                    result.append(num)
                    break
        else:
            # 非字母字符直接添加
            result.append(char)
    
    # 返回结果字符串
    return ''.join(result)

# 测试用例
if __name__ == "__main__":
    print(transform_password("LIming0701"))  # 输出: 5464640701
    print(transform_password("PassW0rd"))    # 输出: 62778073
    print(transform_password("helloWORLD123"))  # 输出: 4355686752123

代码解释

  • 映射表letter_to_num 是一个字典,其中键是字母组(如 'abc'),值是这些字母对应的数字(如 '2')。
  • 字符处理 :对于每个字符,首先检查它是否是字母。如果是大写字母,根据规则转换为相应的前一个字母(A 特殊处理)。然后,在映射表中查找对应的数字。
  • 结果拼接 :使用列表 result 来存储转换后的字符或未变化的非字母字符,最后使用 ''.join(result) 将列表转换为字符串返回。

总结

通过上述方法,我们能够有效地将给定的字符串转换为符合要求的数字密码。这种方法不仅适用于简单的字母转换,还能处理包含数字和其他特殊字符的复杂情况。希望这篇文章能帮助你理解这种密码变换规则及其实现方式。

相关推荐
幻63 天前
小S的倒排索引 | 豆包MarsCode AI刷题
青训营笔记
用户826014428304 天前
469. 环形数组最大子数组和问题
青训营笔记
用户605721920985 天前
奇妙货币交易问题 | 豆包MarsCode AI刷题
青训营笔记
我明天再来学Web渗透6 天前
“抖音互联网架构分析及高可用系统构建思考”(方向三)| 豆包MarsCode AI刷题
青训营笔记
用户302133066207 天前
第三次刷题 | 豆包MarsCode AI刷题
青训营笔记
用户91059730277012 天前
CSS详解| 豆包MarsCode AI刷题
青训营笔记
huyck12 天前
伴学笔记1|豆包MarsCode AI 刷题
青训营笔记
用户197009008153817 天前
实现一个TodoList | 青训营 x 豆包MarsCode技术训练营
青训营笔记
幻617 天前
小U的相似字符串 | 豆包MarsCode AI刷题
青训营笔记
Grin1 个月前
寻找最大葫芦 | 豆包MarsCode AI刷题
青训营笔记