一、题目
给定一个字符串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;
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<>();
int rk =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.add(str.charAt(rk));
++rk;
}
ans=Math.max(ans,rk-i);
}
return ans;
}
}
2、输出结果
|