const str = 'helloworld';const res = str.split('').reverse().join('');console.log(res);
所谓的回文字符串,就是正着读和反着读是一样的。
function isPalindrome(str) {// 先反转字符串const reversedStr = str.split('').reverse().join('');// 判断反转前后是否相等return reversedStr === str;}
同时,回文字符串还有另一个特性:如果从中间位置劈开,那么两边的两个子串在内容上是完全对称的。因此我们可以结合对称性来做判断:
function isPalindrome(str) {// 缓存字符串的长度const len = str.length;// 遍历前半部分,判断和后半部分是否对称for (let i = 0; i < len / 2; i++) {if (str[i] !== str[len - i - 1]) {return false;}}return true;}
也可以通过双指针方法判断是否为回文字符串:
function isPalindrome(str) {let left = 0;let right = str.length - 1;while (left < right) {if (str[left] !== str[right]) return false;left++;right--;}return true;}
谨记这个 对称 的特性,非常容易用到。
字符串相关:
字符串题干中出现 回文 关键字,那么首先想到的必须是:对称性
和 双指针
。
常用编码:
32
常用方法:
String.prototype.charAt
:获取字符串指定索引的子字符String.prototype.charCodeAt
:获取字符串指定索引的子字符的 Unicode 值String.prototype.codePointAt
:同上String.fromCharCode
:根据指定的 Unicode 值转换为字符String.fromCodePoint
:同上使用方法 String.prototype.charAt 可以获取字符串指定索引下标的字符:
const str = 'ABC';// 获取第一个子字符的 Unicode 值const s1 = str.charAt(0);console.log(s1);// 'A'
使用方法 String.prototype.charCodeAt 可以获取字符串指定索引下标的字符的 ASCII 码:
const str1 = 'ABC';const str2 = 'abc';const code1 = str1.charCodeAt(0);const code2 = str2.charCodeAt(0);console.log(code1);// 65console.log(codee2);// 97
使用方法 String.fromCharCode 可以将 ASCII 码转换为字符:
const s1 = String.fromCharCode(65);// Aconst s2 = String.fromCharCode(90);// Zconst s3 = String.fromCharCode(97);// aconst s4 = String.fromCharCode(122);// z
从字符串中心向两边扩展,需要获取字符中间点:
const left = s.length / 2 - 1;const right = s.length / 2;// 例如:'abcd'// left = 4 / 2 - 1 = 1 从中间左侧开始下标为 1 即为 b// right = 4 / 2 = 2 从中间右侧开始下标为 2 即为 c
const left = (s.length - 1) / 2;const right = (s.length - 1) / 2;// 例如:'abcde'// left = (5 - 1) / 2 = 2 从中间左侧开始下标为 2 即为 c// right = (5 - 1) / 2 = 2 从中间右侧开始下标为 2 即为 c
const left = s.length % 2 === 0 ? s.length / 2 - 1 : (s.length - 1) / 2;const right = s.length % 2 === 0 ? s.lenght / 2 : (s.lenght - 1) / 2;
const start = 0;const end = s.length - 1;
// 获取数字数量级// 例如:// 1: 9 -> 0// 2: 99 -> 1// 3: 99 -> 2// 4: 999 -> 3const n = Math.floor(Math.log10(x));// 对应个十百千的转化const n = 10 ** Math.floor(Math.log10(x));