Leetcode 3.无重复字符的最长子串(带图)
Posted 自行车在路上
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 3.无重复字符的最长子串(带图)相关的知识,希望对你有一定的参考价值。
写下leetCode,每天一道,带上图,题目来源leetCode
题目-3.无重复字符的最长子串
图-思路
穷举法
将所有子串列出来
滑动窗口发
start(开始)和end(结束),初始化为0,以set保存字符,如果字符不存在,end++,set后尾加入元素,存在则start++,set最前面元素去除,每次更res的最大值,时间复杂度o(n)
代码
穷举法
public static int lengthOfLongestSubstring(String s) {
int res=0;
for(int i=0;i<s.length();i++){
for(int j=i+1;j<=s.length();j++){
if(isTrue(s,i,j))
res=Math.max(res,j-i);
}
}
return res;
}
public static boolean isTrue(String s ,int start,int end){
Set<Character> set=new HashSet<>();
for(int i=start;i<end;i++){
if(set.contains(s.charAt(i)))
return false;
set.add(s.charAt(i));
}
return true;
}
复杂度为O(n^3)
窗口滑动法
start(开始)和end(结束),初始化为0,以set保存字符,如果字符不存在,end++,set后尾加入元素,存在则start++,set最前面元素去除,每次更res的最大值
public static int lengthOfLongestSubstring(String s) {
int n = s.length();
int res = 0;
int end=0,start=0;
Set<Character> set=new LinkedHashSet<>();
while(start<n && end<n){
if(set.contains(s.charAt(end))){
set.remove(s.charAt(start++));
}else{
set.add(s.charAt(end++));
res=Math.max(res,end-start);
}
}
return res;
}
时间复杂度o(n)
demo下载路径
参考
出处
以上是关于Leetcode 3.无重复字符的最长子串(带图)的主要内容,如果未能解决你的问题,请参考以下文章