共计 1348 个字符,预计需要花费 4 分钟才能阅读完成。
反转字符串 II
-
模仿 + 组合 API
间接模仿操作, 应用组合 API 对字符串进行反转
/** * @param {string} s * @param {number} k * @return {string} */ var reverseStr = function(s, k) { const length = s.length; let newStr = ''; let i = 2 * k; for(; i <= length; i += 2 * k) {newStr += s.slice(i - 2 * k, i - k).split('').reverse().join('') + s.slice(i - k, i); } // 回退上一个状态 i -= 2 * k; if(length - i < k) newStr += s.slice(i).split('').reverse().join(''); if(length - i < k * 2 && length - i >= k) newStr += s.slice(i, i + k).split('').reverse().join('') + s.slice(i + k); return newStr; };
验证回文字符串 Ⅱ
-
两次验证
/** * @param {string} s * @return {boolean} */ var validPalindrome = function(s) { // 定义双指针 let leftPointer = 0; let rightPointer = s.length - 1; while(leftPointer < rightPointer) { // 当左右指针指向的值不相等时, 去掉一个元素再进行判断 if(s.charAt(leftPointer) !== s.charAt(rightPointer)) return isPalindrome(s.slice(leftPointer + 1, rightPointer + 1)) || isPalindrome(s.slice(leftPointer, rightPointer)); leftPointer++; rightPointer--; } return true; }; const isPalindrome = (s) => { // 定义双指针 let leftPointer = 0; let rightPointer = s.length - 1; while(leftPointer < rightPointer) {if(s.charAt(leftPointer++) !== s.charAt(rightPointer--)) return false; } return true; }
字符串中的第一个惟一字符
-
哈希映射
利用哈希表存储每个字母呈现次数
/** * @param {string} s * @return {number} */ var firstUniqChar = function(s) {const appearTimes = new Map(); for(let c of s) {if(appearTimes.has(c)) appearTimes.set(c, appearTimes.get(c) + 1); else appearTimes.set(c, 1); } for(let [char, time] of appearTimes) {if(time === 1) return s.indexOf(char); } return -1; };
小结
题目都比较简单, 有时候能够模仿操作, 间接解题.
正文完