[LeetCode] 无重复字符的最长子串 & 最长回文子串

简介: 博主最近在看新的工作机会,也是在找一些leetcode上比较高频的算法复习一下,这里分享两道算法题的解题。

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~

前言

博主最近在看新的工作机会,也是在找一些leetcode上比较高频的算法复习一下,这里分享两道算法题的解题。

3. 无重复字符的最长子串

image.png

解题思路:

此题不难想到使用哈希表+快慢双指针来进行重复字符的记录和遍历,每次字符串的遍历,快指针固定+1,如果截取到的字符串中有重复字符,则将慢指针向前移动直到字符串中无重复字符。

贴代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
   
   
   var left = 0, right = 0, max = 0, map = new Map();

   while(right < s.length) {
   
   
       //如果有重复的字符,移动慢指针并且删除慢指针对应哈希表中的字符
       while(map.has(s[right]) && left < right) {
   
   
           map.delete(s[left]);
           left++;
       }
       map.set(s[right], 1);
       max = Math.max(max, right - left + 1);
       right++;
   }

   return max;
};

5. 最长回文子串

image.png

解题思路:

回文数,其实就是自一个中间基准数起,左右的字符一模一样,如bab、bbabb,他们的基数都是a,并且左右字符相同,因此他们是回文数。

因此可以采用双指针+中心扩散的解法,把字符串中所有的字符都作为基准数,中心扩散,并且记录最大的回文子串,即可。

贴代码

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
   
   
   var max = '';
   const dfs = (left, right) => {
   
   
        //回文的情况,深度查找,继续向两边扩散
        while(s[left] === s[right] && left >= 0 && right <= s.length ) {
   
   
            left--;
            right++;
        }
        return s.substr(left + 1, right - left - 1);
    }
    for(var i = 0; i < s.length; i++) {
   
   
        const res1 = dfs(i, i);
        const res2 = dfs(i, i + 1)
        max = res1.length > max.length ? res1 : max;
        max = res2.length > max.length ? res2 : max;
    }
    return max;
};

结尾

博主准备面试还是比较喜欢从一些高频次算法题和js手写性原理题下手复习,对于leetcode一些比较冷门的题目,平时作为兴趣,复习的时候还是不会列入侧重点。

目录
相关文章
|
17天前
|
存储 算法 测试技术
力扣经典150题第三十三题:最小覆盖子串
力扣经典150题第三十三题:最小覆盖子串
10 1
|
1月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
1月前
|
存储 算法 数据可视化
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
|
13天前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
9 0
|
17天前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
9 0
|
17天前
|
存储 算法 程序员
力扣经典150题第三十一题:无重复字符的最长子串
力扣经典150题第三十一题:无重复字符的最长子串
12 0
|
1月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
|
1月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
1月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题