leetCode第3题(找出字符串中不含有重复字符的最长子串的长度)

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetCode第3题(找出字符串中不含有重复字符的最长子串的长度)相关的知识,希望对你有一定的参考价值。

一、题目

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

示例1
输入: str=“abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是"abc",所以其长度为3

示例2
输入: str=“bbbbb”
输出: 1
解释:因为无重复字符的最长子串是"b",所以其长度为1

示例3
输入: str=“pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是"wke",所以其长度为3

示例4
输入: str=""
输出: 0

二、题目代码解析

package com.xz.leetcode.day3;

import java.util.HashSet;
import java.util.Set;

/**
 * @description: 给定一个字符串str,请你找出其中不含有重复字符的最长子串的长度
 *
 *              示例1
 *              输入: str="abcabcbb"
 *              输出: 3
 *              解释: 因为无重复字符的最长子串是"abc",所以其长度为3
 *
 *              示例2
 *              输入: str="bbbbb"
 *              输出: 1
 *              解释:因为无重复字符的最长子串是"b",所以其长度为1
 *
 *              示例3
 *              输入: str="pwwkew"
 *              输出: 3
 *              解释: 因为无重复字符的最长子串是"wke",所以其长度为3
 *
 *              示例4
 *              输入: str=""
 *              输出: 0
 * @author: xz
 * @create: 2021-07-27 22:11
 */
public class Demo {
    public static void main(String[] args) {
        String str="abcabcbb";
        int length=lengthOfLongestSubString(str);
        System.out.println("不含有重复字符的最长子串的长度: "+length);
    }

    public static int lengthOfLongestSubString(String str){
        //定义一个哈希集合,记录每个字符是否出现过
        Set<Character> set =new HashSet<>();
        //右指针的初始值为0,相当于我们在字符串的左边界第一个字符
        int rk =0;
        //最长子串的长度,初始值为0
        int ans=0;
        for(int i=0;i<str.length();++i){
            if(i != 0){
                //左指针向右移动一格,移除一个字符
                set.remove(str.charAt(i-1));
            }
            //不断的移动右指针
            while(rk < str.length() && !set.contains(str.charAt(rk))){
                //添加到set集合中
                set.add(str.charAt(rk));
                ++rk;
            }
            //计算最大值
            ans=Math.max(ans,rk-i);
        }
        return ans;

    }
}

2、输出结果

以上是关于leetCode第3题(找出字符串中不含有重复字符的最长子串的长度)的主要内容,如果未能解决你的问题,请参考以下文章

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

精选力扣500题 第4题 LeetCode 3. 无重复字符的最长子串 c++详细题解

LeetCode刷题记录(小森要找工作啦!!!!!!!!!!)

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

leetcode 算法题3 无重复字符的最长子串

#leetcode刷题之路3-无重复字符的最长子串