沂濛的小站

  • 首页
  • Blog
    • 足球,终生为蓝
    • 随笔,记录点滴
    • 杂谈,感悟人生
    • 诗馀,品味生活
    • 围棋,坐隐棋枰
    • 影评,读书笔记
    • 杂烩,林林总总
    • 编程,码工细语
  • CBD围棋&双象俱乐部
沂濛的小站
  1. 首页
  2. 编程,码工细语
  3. 正文

无重复字符的最长子串

15 11 月, 2022 934点热度 3人点赞 0条评论

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

示例 1:

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

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

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
  请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
 

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成(from LeetCode)

这道题比较简单,只要去重,无脑联想集合总没有错,因此使用数据结构HashSet。顺便复习了代码单元和码点的概念,分别用方法一(lengthOfLongestSubstring1)和方法二(lengthOfLongestSubstring2)而完成,但是时间复杂度是O(n²),因此思考别的算法。

参考此题的算法介绍,可以采用滑动窗口算法,方法三(lengthOfLongestSubstring3)将时间复杂度降为O(n),只遍历字符串一次。因为字符集是ASCII,取值在[0,128)之间,因此还有更简便的算法,之后再写。

通过本题,可以延伸思考:

1.码点和代码单元的区别。

2.集合Set的用法。

3.HashSet,LinkedHashSet,TreeSet应用场景的不同。

4.滑动窗口在算法中的应用场景条件。

5.Java流操作对于代码的简化。

class Solution {
public int lengthOfLongestSubstring1(String s) {
HashSet&lt;Character&gt; set=new HashSet&lt;&gt;();
int sub=0;
for(int i=0;i&lt;s.length();i++){
for(int j=i;j&lt;s.length();j++){
if(set.contains(s.charAt(j))){
if(set.size()&gt;sub){
sub=set.size();
}
set.clear();
break;
}else set.add(s.charAt(j));
}
if(set.size()&gt;sub) sub=set.size();
}
return sub;
}
public int lengthOfLongestSubstring2(String s) {
HashSet&lt;Integer&gt; set=new HashSet&lt;&gt;();
int sub=0;
int[] codePoints=s.codePoints().toArray();
for(int i=0;i&lt;codePoints.length;i++){
for(int j=i;j&lt;codePoints.length;j++){
if(set.contains(codePoints[j])){
if(set.size()&gt;sub){
sub=set.size();
}
set.clear();
break;
}else set.add(codePoints[j]);
}
if(set.size()&gt;sub) sub=set.size();
}
return sub;
}
public int lengthOfLongestSubstring3(String s) {
HashSet&lt;Character&gt; set=new HashSet&lt;&gt;();
int sub=0;
int right=-1;
for(int i=0;i&lt;s.length();i++){
if(i&gt;0) set.remove(s.charAt(i-1));
while(right&lt;(s.length()-1)&amp;&amp;!(set.contains(s.charAt(right+1)))){
set.add(s.charAt(right+1));
right++;
}
if(set.size()&gt;sub) sub=set.size();
}
return sub;
}
}//wriiten by lvyimeng
标签: 暂无
最后更新:16 11 月, 2022

沂濛

爱好广泛的纽约小文艺

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
归档
  • 2025 年 3 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月
  • 2024 年 10 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2024 年 1 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 5 月
  • 2023 年 4 月
  • 2023 年 3 月
  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 11 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2022 年 6 月
  • 2022 年 5 月
  • 2022 年 3 月
  • 2021 年 12 月
  • 2021 年 10 月
  • 2021 年 9 月
  • 2021 年 8 月
  • 2021 年 7 月
  • 2021 年 6 月
  • 2021 年 5 月
  • 2021 年 3 月
  • 2021 年 2 月
  • 2021 年 1 月
  • 2020 年 12 月
  • 2020 年 11 月
  • 2020 年 8 月
  • 2020 年 7 月
  • 2019 年 12 月
  • 2018 年 12 月
  • 2018 年 9 月
  • 2018 年 8 月
  • 2018 年 7 月
  • 2018 年 5 月
  • 2018 年 3 月
  • 2018 年 1 月
  • 2017 年 12 月
  • 2017 年 7 月
  • 2017 年 5 月
  • 2017 年 2 月
  • 2016 年 11 月
  • 2016 年 10 月
  • 2016 年 9 月
  • 2016 年 5 月
  • 2016 年 4 月
  • 2016 年 3 月
  • 2016 年 2 月
  • 2016 年 1 月
  • 2015 年 12 月
  • 2015 年 10 月
  • 2015 年 9 月
  • 2015 年 8 月
  • 2015 年 7 月
  • 2015 年 6 月
  • 2014 年 12 月
  • 2014 年 11 月
  • 2014 年 10 月
  • 2014 年 9 月
  • 2014 年 5 月
  • 2014 年 4 月
  • 2013 年 1 月
  • 2012 年 11 月
  • 2012 年 9 月
  • 2012 年 7 月
  • 2012 年 5 月
  • 2012 年 4 月
  • 2012 年 3 月
  • 2012 年 2 月
  • 2011 年 11 月
  • 2011 年 8 月
  • 2011 年 3 月
  • 2011 年 2 月
  • 2011 年 1 月
  • 2010 年 12 月
  • 2010 年 10 月
  • 2010 年 9 月
  • 2010 年 8 月
  • 2010 年 7 月
  • 2010 年 6 月
  • 2010 年 3 月
  • 2010 年 1 月
  • 2009 年 12 月
  • 2009 年 9 月
  • 2009 年 8 月
  • 2009 年 7 月
  • 2009 年 6 月
  • 2009 年 5 月
  • 2009 年 4 月
  • 2009 年 2 月
  • 2009 年 1 月
  • 2008 年 11 月
  • 2008 年 10 月
  • 2007 年 7 月
  • 2007 年 6 月
  • 2007 年 5 月
  • 2007 年 4 月
  • 2007 年 3 月
  • 2007 年 2 月
  • 2007 年 1 月
  • 2006 年 12 月
  • 2006 年 11 月
  • 2006 年 10 月
分类
  • 围棋,坐隐棋枰
  • 影评,读书笔记
  • 杂烩,林林总总
  • 杂谈,感悟人生
  • 编程,码工细语
  • 诗馀,品味生活
  • 足球,终生为蓝
  • 随笔,记录点滴

COPYRIGHT © 2025 沂濛 版权所有

All Designed By Yimeng Lu

京ICP备2022015169号-1