手撕算法-无重复字符的最长子串

描述

分析

滑动窗口,记录窗口中的所有出现的字符,然后窗口左边界固定,右边界右滑,如果,窗口中不存在新的字符,则右滑成功,否则左边界右滑,直到窗口中不存在右边界的值。

描述感觉不清晰,直接看代码吧!!

代码

版本1:

java 复制代码
class Solution {
    public int lengthOfLongestSubstring(String s) {
        int left = 0, right = 0;
        Set<Character> set  = new HashSet<>();

        int max = 0;

        while(right < s.length()) {
            if(!set.contains(s.charAt(right))) {
                set.add(s.charAt(right));
                right++;
            } else {
                set.remove(s.charAt(left));
                max = Math.max(max, right - left);
                left++;
            }
        }

        // 最后到终点了,也要再次判断最长长度
        max = Math.max(max, right - left);

        return max;
    }
}

版本2:(面试官推荐的版本)

java 复制代码
class Solution {
    public int lengthOfLongestSubstring(String s) {
        Map<Character, Integer> dic = new HashMap<>();
        int i = -1, res = 0, len = s.length();
        for(int j = 0; j < len; j++) {
            if (dic.containsKey(s.charAt(j)))
                i = Math.max(i, dic.get(s.charAt(j))); // 更新左指针 i
            dic.put(s.charAt(j), j); // 哈希表记录
            res = Math.max(res, j - i); // 更新结果
        }
        return res;
    }
}

面试公司

阿里

相关推荐
测试员周周几秒前
【Appium 系列】第08节-pytest 集成 — conftest.py 中的 fixture 与 hook
开发语言·人工智能·python·功能测试·appium·测试用例·pytest
SunnyDays10112 分钟前
Java 实现 PDF 中文文本查找与高亮的四种方法
java·pdf·查找文字
倒流时光三十年3 分钟前
PostgreSQL 一次由 string_agg 引发的数据错位 Bug 深度复盘
java·postgresql·string_agg
Hui_AI7203 分钟前
电商桌面自动化实战:用RPA实现抖店批量铺货
运维·开发语言·人工智能·自然语言处理·自动化·开源软件·rpa
鱼子星_3 分钟前
【数据结构与算法】OJ题目详解(一)-单链表:从易到难的面试OJ题目
c语言·数据结构·算法·链表·面试·职场和发展
人道领域4 分钟前
【LeetCode刷题日记】递归与回溯实战 257.二叉树的所有路径——一篇文章彻底搞懂回溯
开发语言·python·算法·leetcode
Gofarlic_OMS5 分钟前
Mastercam浮动许可利用率低:软件许可浪费,回收再分配
java·大数据·开发语言·架构·制造
ulias2126 分钟前
leetcode热题 - 7
数据结构·算法·leetcode
AC赳赳老秦6 分钟前
OpenClaw与飞书多维表格联动:自动同步工作数据、生成统计图表,实现高效管理
java·数据库·python·信息可视化·飞书·deepseek·openclaw
吃好睡好便好8 分钟前
在Matlab中用sphere( )函数绘制球面图
开发语言·前端·javascript·学习·算法·matlab·信息可视化