functionisPalindrome(str) { if (!str) return; let len = str.length; let k = len - 1; // 指针 for (let i = 0; i < len / 2; i++) { if (i <= k && str[i] !== str[k]) { returnfalse; } k--; } returntrue; }
functionvalidPalindrome(str) { if (!str) return; let len = str.length; // j,k左右指针、count 记录跳过的次数、 flag是否回文 let j = 0, k = len - 1, count = 0, flag = true;
for (let i = 0; i < len; i++) { if (j > k) break; if (str[j] === str[k]) { j++; k--; } elseif (str[j + 1] === str[k]) { // 左指针跳过一个 j = j + 2; k--; count++; if (count > 1) returnfalse; } elseif (str[j] === str[k - 1]) { // 右指针跳过一个 k = k - 2; j++; count++; if (count > 1) returnfalse; } else { // 非回文字符串,直接跳出循环 flag = false; break; } }
WordDictionary.prototype.addWord = function (str) { if (!str) return; let len = str.length; let val = this.words.get(len); if (val) { val.push(str); this.words.set(len, val); } else { this.words.set(len, [str]); } }
WordDictionary.prototype.search = function (str) {
if (!str) return;
// 传入的字符串的长度找不到记录,则查询的字符串不存在 let len = str.length;
if (!this.words.get(len)) returnfalse; let val = this.words.get(len);
// 判断传入的是字符串还是正则 if (!str.includes('.')) { return val.includes(str); }