LeetCode 每日刷题记录 [ 2022 - 02 - 15 ]

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

小结

题目都比较简单, 有时候可以模拟操作, 直接解题.

你可能感兴趣的:(LeetCode 每日刷题记录 [ 2022 - 02 - 15 ])