目录
- 一、介绍
- 二、准备
- 三、目标
- 四、代码
- 五、完成
一、介绍
有言曰:“回文诗,回复读之,皆歌而成文也”。回文诗,是使用词序回环往复的方式所成的诗,通俗来讲就是正读或者倒读都能成为诗句。历经数代诗人的创新,现有的回文诗种类之多,形态各异,颇为有趣。
在 JavaScript 中,回文诗也可以称之为回文字符串,是指正读和倒读的结果一样的字符串,从结构上来看,两侧的字符呈中心对称。
形如 aba,abba 的字符串都是回文字符串。另外,单字符串、空字符串也是一种特殊的回文字符串哦。
二、准备
本题已经内置了初始代码,打开实验环境,目录结构如下:
├── isPalindromeStr.js
└── test.js
其中:
- isPalindromeStr.js 是待补充的 js 文件。
- test.js 是用于测试的 js 文件。
三、目标
补充文件 isPalindromeStr.js 中的 isPalindromeStr 回文字符串检测工具函数,使其实现我们需要的功能:
- 对输入参数的类型做校验,保证只正常处理字符串类型参数。
- 如果所输入的字符串(包括单字符串和空字符串)是回文字符串,则返回 true。
- 其他的情况一律返回 false。
- 通过如下的所有参考测试用例。
请保证实现的工具函数满足所有测试用例。打开 VS Code 终端,并输入:
node ./test.js
如果你的结果正确,将不会有任何输出。否则终端将会输出类似如下内容:
四、代码
test.js
const isPalindromeStr = require("./isPalindromeStr");
function shouldReturnTrue(str) {
console.assert(
isPalindromeStr(str) === true,
`输入${
typeof str === "symbol" ? str.toString() : JSON.stringify(str)
}时,应该返回true`
);
}
function shouldReturnFalse(str) {
console.assert(
isPalindromeStr(str) === false,
`输入${
typeof str === "symbol" ? str.toString() : JSON.stringify(str)
}时,应该返回false`
);
}
// 如果传入的参数不是字符串类型,应该返回 false
shouldReturnFalse(1); // 输出 => false
shouldReturnFalse(true); // 输出 => false
shouldReturnFalse(null); // 输出 => false
shouldReturnFalse(undefined); // 输出 => false
shouldReturnFalse(Symbol("symbol")); // 输出 => false
shouldReturnFalse({ obj: "str" }); // 输出 => false
// 如果传入的是空字符串,应该返回 true
shouldReturnTrue(""); // 输出 => true
// 如果传入的空字符串只有一个字符,应该返回 true
shouldReturnTrue("a"); // 输出 => true
// 如果传入的空字符串是回文字符串,应该返回 true
shouldReturnTrue("aa"); // 输出 => true
shouldReturnTrue("aba"); // 输出 => true
shouldReturnTrue("abba"); // 输出 => true
shouldReturnTrue("abcba"); // 输出 => true
// 如果传入的空字符串不是回文字符串,应该返回 false
shouldReturnFalse("ab"); // 输出 => false
shouldReturnFalse("abc"); // 输出 => false
shouldReturnFalse("abcd"); // 输出 => false
//如果传入的回文诗句,应该返回 true
shouldReturnTrue("响水池中池水响"); // 输出 => true
shouldReturnTrue("黄金谷里谷金黄"); // 输出 => true
isPalindromeStr.js
function isPalindromeStr(str) {
// 在这里写入具体的实现逻辑
// 返回值是 boolean 类型, 如果是回文字符串应该返回 true, 否则返回 false
};
module.exports = isPalindromeStr; // 检测需要请勿删除
五、完成
function isPalindromeStr(str) {
let flag = false
// 在这里写入具体的实现逻辑
//类型判断
const type = typeof str
//如果不是字符串则直接返回
if (type != 'string') {
return flag
}
//如果是字符串且长度为1或者0则直接返回true
if (str.length == 1 || str.length == 0) {
flag = true
} else {
//说明是字符串且长度不唯一 则进行判断
//将字符串分割为数组,在将其反转,在转换为字符串
let newStr = str.split('').reverse().join('')
//如果反转后的字符串和原字符串相等则说明是回文
if (newStr == str) {
flag = true
}
}
// 返回值是 boolean 类型, 如果是回文字符串应该返回 true, 否则返回 false
return flag
}
module.exports = isPalindromeStr; // 检测需要请勿删除