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题(找出字符串中不含有重复字符的最长子串的长度)的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第4题 LeetCode 3. 无重复字符的最长子串 c++详细题解
LeetCode刷题记录(小森要找工作啦!!!!!!!!!!)