反转字符串 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;};

小结

题目都比较简单, 有时候能够模仿操作, 间接解题.