小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) 将列表转换为字符串返回。

总结

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

相关推荐
liangxiu5 小时前
CSS布局技巧汇总| 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵8 天前
Go 垃圾回收 | 豆包MarsCode AI刷题
青训营笔记
末班车4228 天前
前端框架中的设计模式 | 豆包MarsCode AI刷题
青训营笔记
VanceLLF9 天前
神奇数字组合 | 豆包MarsCode AI刷题
青训营笔记
lann9 天前
Go 程序的优化 | 豆包MarsCode AI刷题
青训营笔记
用户522812710497810 天前
性能优化与调试技巧 | 豆包MarsCode AI刷题
青训营笔记
千慌百风定乾坤11 天前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO12 天前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
滑滑滑13 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记