一、题目描述
现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 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 。
数字和其它的符号都不做变换。
数据范围: 输入的字符串长度满足 1≤n≤100
二、输入描述
输入一组密码,长度不超过100个字符。
三、输出描述
输出密码变换后的字符串。
四、解题思路
- 读取输入的密码字符串;
- 创建一个字符数组 a,用于存储九键手机键盘上数字与字母的对应关系;
- 创建一个 StringBuilder 对象 sb,用于存储转换后的密码字符串;
- 遍历输入的密码字符串,对每个字符进行如下操作:
- 如果字符是大写字母(A 到 Z),将其转换为小写字母,并往后移一位;如果移动后的字符超出小写字母范围,则循环回到 a;
- 如果字符是小写字母(a 到 z),根据九键手机键盘上的对应关系将其转换为相应的数字;
- 其他情况下,字符保持不变;
- 将转换后的字符添加到 sb 中;
- 输出 sb 中存储的转换后的密码字符串;
五、JavaScript算法源码
function calculate(password) {
// 用于存储九键手机键盘上数字与字母的对应关系
const a = [
"2", "2", "2", "3", "3", "3", "4", "4", "4", "5", "5", "5",
"6", "6", "6", "7", "7", "7", "7", "8", "8", "8", "9", "9", "9", "9"
];
let transformedPassword = "";
// 遍历输入的密码字符串
for (let i = 0; i < password.length; i++) {
let c = password[i];
// 如果字符是大写字母(A 到 Z),将其转换为小写字母,并往后移一位;
if (c >= "A" && c <= "Z") {
c = String.fromCharCode(c.charCodeAt(0) + 32 + 1);
if (c > "z") {
c = String.fromCharCode(c.charCodeAt(0) - 26);
}
// 如果字符是小写字母(a 到 z),根据九键手机键盘上的对应关系将其转换为相应的数字
} else if (c >= "a" && c <= "z") {
c = a[c.charCodeAt(0) - "a".charCodeAt(0)];
}
transformedPassword += c;
}
return transformedPassword;
}
六、效果展示
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。