HJ21 简单密码

264 阅读1分钟

Problem: HJ21 简单密码

题目描述

描述

现在有一种密码变换算法。

九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.

而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。

数字和其它的符号都不做变换。
数据范围:输入的字符串长度满足1n1001≤n≤100

输入描述:

输入一组密码,长度不超过100个字符。

输出描述:

输出密码变换后的字符串

示例1

输入:YUANzhi1987

输出:zvbo944198

代码

function transformPassword(password) {
  const keypadMapping = {
    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',
  };

  let transformedPassword = '';
  for (let i = 0; i < password.length; i++) {
    const char = password[i];
    if (/[a-z]/.test(char)) {
      transformedPassword += keypadMapping[char];
    } else if (/[A-Z]/.test(char)) {
      let lowercaseChar = char.toLowerCase();
      if (lowercaseChar === 'z') {
        transformedPassword += 'a';
      } else {
        transformedPassword += String.fromCharCode(lowercaseChar.charCodeAt(0) + 1);
      }
    } else {
      transformedPassword += char;
    }
  }

  return transformedPassword;
}

function main() {
  const password = 'AbcXyz123';
  const transformedPassword = transformPassword(password);
  console.log(transformedPassword);
}

main();

复杂度

  • 时间复杂度: O(n)O(n)

  • 空间复杂度: O(1)O(1)