【226】小T的密码变换规则| 豆包MarsCode AI刷题

59 阅读3分钟

问题描述: 小T设计了一套密码变换规则,将输入的字符串转换成一串数字密码。变换规则如下:小写字母按给定的映射关系转换为对应的数字,大写字母先转为小写字母,再跳到字母表中的前一个字母,并按上述规则转换为对应的数字。非字母字符保持不变。

测试样例: 样例1:

输入:s = "LIming0701" 输出:'5464640701'

样例2:

输入:s = "PassW0rd" 输出:'62778073'

样例3:

输入:s = "helloWORLD123" 输出:'4355686752123'

解题思路:

  1. 定义小写字母到数字的映射关系。
  2. 遍历输入字符串中的每个字符,根据字符类型进行不同的转换。
  3. 对于大写字母,先转换为小写,再找到字母表中的前一个字母,并进行映射。
  4. 对于小写字母,直接进行映射。
  5. 对于非字母字符,保持不变。
  6. 将转换后的字符拼接成最终的数字密码字符串。

解题步骤:

  1. 定义一个函数solution,参数为字符串s。
  2. 初始化一个映射字典mapping,存储小写字母到数字的映射关系。
  3. 初始化一个空字符串result,用于存储转换后的数字密码。
  4. 遍历输入字符串s中的每个字符。
  5. 如果字符是大写字母,先转换为小写,再找到字母表中的前一个字母,并进行映射。
  6. 如果字符是小写字母,直接进行映射。
  7. 如果字符是非字母字符,保持不变。
  8. 将转换后的字符添加到result中。
  9. 返回result

解题代码:

def solution(s: str) -> str:
    # 定义小写字母到数字的映射关系
    mapping = {
        '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'
    }
    
    # 初始化结果字符串
    result = ''
    
    # 遍历输入字符串中的每个字符
    for char in s:
        # 如果字符是大写字母
        if char.isupper():
            # 特殊处理A
            if char == 'A':
                result += '9'
            else:
                # 转换为小写字母表中的前一个字母
                prev_char = chr(ord(char.lower()) - 1)
                result += mapping[prev_char]
        # 如果字符是小写字母
        elif char.islower():
            result += mapping[char]
        # 如果字符是非字母字符,保持不变
        else:
            result += char
            
    return result

if __name__ == '__main__':
    print(solution(s="LIming0701") == '5464640701')
    print(solution(s="PassW0rd") == '62778073')
    print(solution(s="helloWORLD123") == '4355686752123')

解题思路详细解析:

  1. 我们首先定义了一个映射字典mapping,它包含了小写字母到数字的映射关系。
  2. 我们初始化了一个空字符串result,用于存储转换后的数字密码。
  3. 我们遍历输入字符串s中的每个字符,并根据字符的类型进行不同的处理。
  4. 如果字符是大写字母,我们先将其转换为小写,然后找到字母表中的前一个字母,并使用映射关系将其转换为数字。
  5. 如果字符是小写字母,我们直接使用映射关系将其转换为数字。
  6. 如果字符是非字母字符,我们保持其不变。
  7. 我们将转换后的字符添加到result中。
  8. 最后,我们返回result,即转换后的数字密码字符串。

复杂度分析: 时间复杂度:O(n),其中n是输入字符串s的长度。我们需要遍历字符串中的每个字符,并进行常数时间的映射操作。 空间复杂度:O(1),除了输入和输出,我们只使用了常量空间来存储映射字典和结果字符串。