青训营笔记3 | 豆包MarsCode AI刷题

9 阅读4分钟

1. 题目描述

小T的密码变换规则

问题描述

小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'

2. 分析

  • 遍历字符串,判断每个字符:
    1. 如果是数字,就直接拼接;
    2. 如果是小写字母,找到对应的数字后把数字拼接到结果上;
    3. 如果是大写字母,找到其小写字母的前一个字母(A应该找z)对应的数字后拼接;

3. 实现

def isupper(s:str)->bool:
    return s.upper()==s
def islower(s:str)->bool:
    return s.lower()==s
map_dict = {
    'a': '2', 'b': '2', 'c': '2',
    'd': '3', 'e': '3', 'f': '3',
    'g': '4', 'h': '4', 'i': '4',
    'j': '5', 'k': '5', 'l': '5',
    'm': '6', 'n': '6', 'o': '6',
    'p': '7', 'q': '7', 'r': '7', 's': '7',
    't': '8', 'u': '8', 'v': '8',
    'w': '9', 'x': '9', 'y': '9', 'z': '9'
}

def solution(s: str) -> str:
    # write code here
    res=''
    for c in s:
        if c.isdigit():
            res+=c
        elif islower(c):
            res+=map_dict[c]
        else:
            if c=='A':
                res+=map_dict['z']
            else:
                res+=map_dict[chr(ord(c.lower())-1)]
    return res

4. 题目总结

1. 理解题目要求

  • 关键点:在刷题时,首先要确保完全理解题目的要求,理清要做什么。对于复杂的转换规则,可以先手动模拟几个简单的例子,以便理解每一步的逻辑;

2. 选择合适的数据结构

  • 字典:适用于需要通过key快速查找对应的value的场景,和遍历列表相比速度更快;
  • 字符串:结果字符串用于存储最终的转换结果,逐个字符处理并拼接;

3. 逐步实现算法

  • 遍历字符串:通过遍历输入字符串的每个字符,根据字符的类型进行相应的处理;
  • 条件判断:使用条件判断来区分数字、小写字母、大写字母和非字母字符,并进行相应的转换;

4. 测试和调试

  • 测试用例:编写多个测试用例,确保代码在各种情况下都能正确运行;
  • 调试:如果遇到问题,可以打上断点,通过MarsCode刷题平台自带的调试功能进行调试,逐步检查代码的执行过程,找出问题所在;
  1. 常用的builtins还是要记的
  • 比如本题中的ordchr

5. 刷题总结

  1. 多总结、及时复盘
  • 总结:每次刷题后,总结解题思路和实现方法,记录下遇到的问题、思考过程和解决方法,总结这类题型对应的解题套路;
  • 复盘:尝试重新做一遍题,看是否能在不借助AI的情况下独立完成,并反思在解题过程中的不足之处,比如是否遗漏了某些情况,是否可以优化代码等;制定合适的刷题计划,循序渐进;

2. 注重练习广度、深度和持久度

  • 广度:尝试不同题型,锻炼自己的思维转换能力和代码实现能力;
  • 深度:逐步挑战更难的题目,提升自己的编程水平,用好AI工具,在完全没有思路时可以让AI先给个思路提示,再尝试自己写;
  • 持久度:忌三天打鱼两天晒网,防止生疏;
  1. 使用工具
  • 善用MarsCode 刷题平台的调试功能,多调试追踪运行步骤;
  • 遇到题目一段时间还是没思路(5min?),尝试让AI分析并给出思路,在此基础上尝试解答;使用AI给出优化、完善的建议;