[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一些比较冷门的题目,平时作为兴趣,复习的时候还是不会列入侧重点。

目录
相关文章
|
1月前
|
Python
【Leetcode刷题Python】5. 最长回文子串
LeetCode 5题 "最长回文子串" 的Python解决方案,使用动态规划算法找出给定字符串中的最长回文子串。
34 3
|
1月前
|
算法
LeetCode第5题最长回文子串
该文章介绍了 LeetCode 第 5 题最长回文子串的解法,通过分析回文子串的特点,使用动态规划的思想,用二维数组记录字符串是否为回文串,从后往前遍历找子串,减少重复判断,最终找到最长回文子串,并总结了解题时通过举例推导找规律的思路。
LeetCode第5题最长回文子串
|
1月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
3月前
|
存储 算法 测试技术
力扣经典150题第三十三题:最小覆盖子串
力扣经典150题第三十三题:最小覆盖子串
25 1
|
3月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
2月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
23 0
|
3月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
19 0
|
3月前
|
存储 算法 程序员
力扣经典150题第三十一题:无重复字符的最长子串
力扣经典150题第三十一题:无重复字符的最长子串
25 0
|
3月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
42 6