当前位置: 首页 > article >正文

leetcode hot100【LeetCode 3. 无重复字符的最长子串】java实现

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

题目描述

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3
解释:最长的无重复字符的子串是 "abc",其长度为 3。

示例 2:

输入: s = "bbbbb"
输出:1
解释:最长的无重复字符的子串是 "b",其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释:最长的无重复字符的子串是 "wke",其长度为 3。

提示:

  • 0 <= s.length <= 5 * 10^4
  • s 由英文字母组成

Java 实现代码

import java.util.HashMap;

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        int left = 0, maxLength = 0;
        
        for (int right = 0; right < s.length(); right++) {
            if (map.containsKey(s.charAt(right))) {
                left = Math.max(map.get(s.charAt(right)) + 1, left);
            }
            map.put(s.charAt(right), right);
            maxLength = Math.max(maxLength, right - left + 1);
        }
        
        return maxLength;
    }
}

解题思路

  1. 滑动窗口:使用两个指针 leftright 表示当前子串的边界。
  2. 哈希表:用一个哈希表存储字符及其最新出现的位置。
  3. 遍历字符串
    • 当遇到重复字符时,更新 left 指针,以确保子串中没有重复字符。
    • 更新哈希表中的字符位置,并计算当前子串的长度,更新最大长度。

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度,滑动窗口遍历了字符串一次。
  • 空间复杂度:O(min(n, m)),其中 n 是字符串的长度,m 是字符集的大小。哈希表的空间复杂度与字符集大小有关。

http://www.kler.cn/a/379576.html

相关文章:

  • 详解数据字典及其主要条目
  • 提高文本处理效率:精通awk命令中的$NF
  • 【Python】数据清洗与特征工程:使用Python的Feature-engine库
  • 个人对Numpy中transpose()函数的理解
  • 【操作系统】每日 3 题(五)
  • Linux第二周作业
  • 发现一个宝藏AI解梦工具
  • 零基础Java第十三期:继承与多态(一)
  • 【算法赌场】SPFA算法
  • Android音频进阶之PCM设备创建(九十三)
  • 【WPF】MatrixTransform类
  • 【Kotlin】 基础语法笔记
  • SQL基础—2
  • 后台管理系统的通用权限解决方案(九)SpringBoot整合jjwt实现登录认证鉴权
  • iOS中OC对象的本质
  • HTTP的初步了解
  • 代码随想录第十五天| 110.平衡二叉树 、 257. 二叉树的所有路径 、404.左叶子之和、222.完全二叉树的节点个数
  • 基于深度学习的数据安全与可追溯性增强
  • qt QPixmap详解
  • 深入了解 Kotlin 高阶函数
  • SpringBoot实现:高效在线试题库系统
  • koa + sequelize做距离计算(MySql篇)
  • 使用WordPress快速搭建个人网站
  • 汽车电子行业数字化转型的实践与探索——以盈趣汽车电子为例
  • Python酷库之旅-第三方库Pandas(193)
  • 【工具变量】中国制造2025试点城市数据集(2000-2023年)