关于javascript:LeetCode-每日刷题记录-2022-02-15

9次阅读

共计 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;
    };

小结

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

正文完
 0