1. 回文检查器
如果传入的字符串是回文字符串,则返回 true。 否则返回 false
回文 palindrome,指在忽略标点符号、大小写和空格的前提下,正着读和反着读一模一样。
注意:检查回文时,你需要先去除所有非字母数字的字符(标点、空格和符号),并将所有字母都转换成大写或都转换成小写。
我们会传入具有不同格式的字符串,如 racecar、RaceCar 和 race CAR 等等。
我们也会传入一些包含特殊符号的字符串,例如 2A33a2、2A3 3a2、2_A33#A2。
1.1 想法
- 已知条件:传入的参数有字符串和数字两种,检查回文时要去除所有的标点符号。
- 判断方法:正数的字符串和倒着数的字符串相等,即为回文字符串
- 代码相关知识点:replace()
1.2 JS代码
function palindrome(str) {
// 先把传入的字符串转换成小写
//利用正则表达式将非字母数字下划线(\W),空格(\s),都(/g)替换掉
let oriStr = str.toString().toLowerCase().replace(/[\W\s_]/g,'')
//将新的字符串拆分 - 反转 - 拼接 成反转字符串
let newStr = oriStr.split('').reverse().join('')
// 比较两个字符串是否相等
if (oriStr === newStr) return true;
else { return false }
}
//测试
palindrome("eye");
2. 罗马数字转换器
把传入的数字转为罗马数字。
转换后的罗马数字字母必须都是大写。
2.1 想法
想要解决这个问题,先要知道罗马字符串的计数原理。
- 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

- 相邻两个罗马字符值,如果左边大于右边,加上左边的值,例如:IV = 5 - 1 = 4
- 相邻两个罗马字符值,如果左边小于右边,减去左边的值,例如:VI = 5 + 1 = 6
- 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
- 做法:把所有罗马字符和其数字分别存到数组中,对数字数组进行遍历,每发现数组中的值大于输入的值,那么就把对应的罗马字符添加到result,第二次再循环时用输入(num)减去数字(number),重复操作。
4. 代码相关知识点: forEach
2.2 JS代码
function convertToRoman(num) {
// 存放罗马字符对应的数字
var number = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
//存放罗马字符
var roman_number =["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
//存放罗马字符结果
let result = ''
// 遍历数值数组,寻找对应的数值
number.forEach((item, index, array) => {
while(num >= item) {
// 添加罗马字符到result中
result += roman_number[index]
num -= item
}
})
return result;
}
convertToRoman(36);
3. 凯撒密码
凯撒密码( Caesar cipher)是最简单且最广为人知的密码(ciphers),也被称为移位密码(shift cipher)。
在移位密码中,明文中的字母通过按照一个固定数目进行偏移后被替换成新的字母。ROT13 是一个被广泛使用的加密技术,明文中的所有字母都被移动 13 位。 也就是, A ↔ N,B ↔ O 等等。
编写一个函数,它将 ROT13 编码的字符串作为输入并返回解码字符串。
所有解码后的字母都必须为字母大写。 请不要解码非字母的字符(例如,空格、标点符号),但你需要在结果中保留它们。
3.1 想法
1.理解题意,明文中所有字母都被移动13位A ↔ N(+13),B ↔ O (-13).解码后的字母必须大写,不要解码非字母的字符(例如,空格、标点符号),但需要在结果中保留。
2. 用split将字符串转换成数组,如果字符串中的数组在预设的数组中,则进入下一个判断。 判断字符串是不是小于13,小于则偏移+13,若大于13则偏移-13。(26为字母表长度,即为一个循环)
3. 代码相关知识点:indexOf()
3.2 JS代码
function rot13(str) {
// 预设字母表
let alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
//字符串转数组
let arr = str.split('');
let newArr = [];
for(let i = 0; i < arr.length; i++){
// 是否存在字母表中
if(alphabet.indexOf(arr[i]) !== -1){
if(alphabet.indexOf(arr[i]) <= 12)
// 小于 12 ,偏移 +13
newArr.push(alphabet[alphabet.indexOf(arr[i]) + 13]);
else
// 大于 12 ,偏移 -13
newArr.push(alphabet[alphabet.indexOf(arr[i]) + 13 - 26]);
}
else newArr.push(arr[i]);
}
return newArr.join('');
}
rot13("SERR PBQR PNZC");
版权声明:本文为CathyleeQ原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。