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

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

1 题目描述

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

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

示例 2:

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

示例 3:

**输入:** s = "pwwkew"
**输出:** 3
**解释:** 因为无重复字符的最长子串是 `"wke"`,  所以其长度为 3
     请注意,  你的答案必须是 **子串** 的长度,  `"pwke"` 是一个_子序列,  _不是子串

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

2 解题思路

解题思路

  1. 滑动窗口 + map, 对字符遍历一次就能找到最长子字符串, 时间复杂度 O(n)

2.1 代码实现

public int lengthOfLongestSubstring(String s) {  
    if (null == s || s.isEmpty()) {  
        return 0;  
    }  
    // key为字符串中的字符,value为字符下标  
    HashMap<Character, Integer> map = new HashMap<>();  
    // i为左指针,j为右指针  
    int i = -1;  
    // res为最长子串的长度  
    int res = 0;  
    for(int j = 0; j < s.length(); j++) {  
        // 如果map中包含当前字符,则将左指针移动到当前字符的下标  
        if (map.containsKey(s.charAt(j))) {  
            i = Math.max(i, map.get(s.charAt(j)));  
        }  
        // 将当前字符放入map中  
        map.put(s.charAt(j), j);  
        // 计算最长子串的长度  
        res = Math.max(res, j - i);  
    }  
    return res;  
}

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

相关文章:

  • 针对股票评论的情感分类器
  • 树莓派4B Qt+FFMPEG 多线程录制USB相机mjpeg数据流“h264_omx“硬件编码的MP4文件
  • Android OpenGL ES详解——glTexImage2D方法
  • 嵌入式课程day13-C语言指针
  • 【实验11】卷积神经网络(2)-基于LeNet实现手写体数字识别
  • leetcode面试 150题之 三数之和 复刷日记
  • 【APP VTable】和市面上的 Table 组件一样,都是接收表格[] 以及数据源[]
  • 最新SQL注入漏洞修复建议
  • Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin
  • 什么是可重入,什么是可重入锁? 它用来解决什么问题?
  • 泛微OA之获取每月固定日期
  • LabVIEW更改图像特定部分的颜色
  • 【API篇】十、生成Flink水位线
  • 3DMAX金属屋顶墙面铺设插件使用方法
  • 自动驾驶感知算法面经(20+)
  • toluaframework中C#怎么调用Lua的方法以及无GC方法
  • 大数据平台架构及规划
  • 计算机网络【CN】IPV4报文格式
  • 创纪录的1亿RPS DDoS攻击利用HTTP/2快速重置漏洞
  • 49.Redis缓存设计与性能优化
  • 关于网络安全运营工作与安全建设工作的一些思考
  • 番外8.2 --- 后续
  • Linux 内核的 current
  • EtherNet Ip工业RFID读写器与欧姆龙PLC 配置示例说明
  • 【软件教程】如何用C++检查TCP或UDP端口是否被占用
  • 网工内推 | 急招网工,思科、华为认证优先,法定节假日三薪