无重复字符的最长子串Java版(力扣)

简介: 无重复字符的最长子串Java版(力扣)

无重复字符的最长子串


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


示例 1:

输入: s = “abcabcbb”

输出: 3

解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。


示例 2:

输入: s = “bbbbb”

输出: 1

解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。


示例 3:

输入: s = “pwwkew”

输出: 3

解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。

请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。


示例 4:

输入: s = “”

输出: 0


提示:

0 <= s.length <= 5 * 104

s 由英文字母、数字、符号和空格组成


题意:找出其中不含有重复字符的 最长子串 的长度

思路:滑动窗口


正确代码:


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

完整代码(含测试代码):


package com.Keafmd.February.day11;
import java.util.HashMap;
import java.util.Map;
/**
 * Keafmd
 *
 * @ClassName: LongestSubstringWithoutRepeatingCharacters
 * @Description: 无重复字符的最长子串 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
 * @author: 牛哄哄的柯南
 * @Date: 2021-03-11 8:23
 * @Blog: https://keafmd.blog.csdn.net/
 */
public class LongestSubstringWithoutRepeatingCharacters {
    public static void main(String[] args) {
        String s1= "pwwkew";
        Solution0311 solution0311 = new Solution0311();
        int result = solution0311.lengthOfLongestSubstring(s1);
        System.out.println(result);
    }
}
class Solution0311 {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character,Integer> map = new HashMap<Character, Integer>();
        int left=0;
        int max=0;
        for (int i = 0; i < s.length(); i++) {
            if(map.containsKey(s.charAt(i))){
                left=Math.max(left,map.get(s.charAt(i))+1);
            }
            map.put(s.charAt(i),i);
            max=Math.max(max,i-left+1);
        }
        return max;
    }
}

输出结果:


3
Process finished with exit code 0


相关文章
|
7月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
205 15
|
存储 Java Apache
|
Java
Java——编码GBK的不可映射字符
Java——编码GBK的不可映射字符
274 1
|
Java API 索引
Java中的字符串与字符操作详解
Java中的字符串与字符操作详解
|
10天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
56 1
|
10天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
49 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
77 0
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
122 16