首先弄清楚Substring和Subsequence,前者是子串,要求连续,后者是子序列,可以不连续

public int lengthOfLongestSubstring(String s) {
/*
一开始自己想的方法:两个指针,一个作为开始,一个用来遍历,复杂度O(N)
*/
int l = s.length();
if (l==0)
return 0;
char[] str = s.toCharArray();
int res = 1;
Set<Character> set = new HashSet<>();
for (int i = 0; i < l-1; i++) {
set.add(str[i]);
for (int j = i+1; j < l; j++) {
if (set.contains(str[j]))
break;
set.add(str[j]);
res = Math.max(res,set.size());
}
set.clear();
}
return res;
}
public int lengthOfLongestSubstring2(String s) {
/*
O(N)做法,自己建立哈希表来记录有没有出现过,第一次接触这种做法,要记住
思路就是用哈希表记录当前字符最近一次出现时的index
如果没出现重复字符串就继续遍历,每次更新res长度
如果出现了重复,那就把最左边的坐标移到前边重复数字的下一个,然后继续遍历,res一直是记录最大长度
与这种做法相比,第一种做法每次都会遍历很多重复的子串
*/
//所有字符都能转化为256以内的int值,这样就可以记录所有字符
int[] index = new int[256];
Arrays.fill(index,-1);
//记录 最左边坐标
int left = 0;
//记录结果
int res = 0;
for (int i = 0; i < s.length(); i++) {
//先检测有没有重复字符,如果,left更新,比较的方法是把哈希表中的记录和left比较,取大的。如果没有出现过,那么哈希表中的记录是-1,肯定是left大
//如果出现过,有两种情况,一种是记录没有left大,说明是和left 之前的一个重复了,这种情况没有影响 ,另一种是比left大,这样就会影响长度的判断,要更新left
left = Math.max(left,index[s.charAt(i)+1]);
//更新哈希表
index[s.charAt(i)] = i;
res = Math.max(res,i-left+1);
}
return res;
}

最新文章

  1. c# 搭建高效分布式web (进一步实现软件的热插拔)
  2. Js中Prototype、__proto__、Constructor、Object、Function关系介绍
  3. 【Android】Android开源项目分类汇总
  4. js中test()函数在正则中使用
  5. VMware12版虚拟机怎么安装win7系统
  6. FZU 2218 Simple String Problem(简单字符串问题)
  7. Java中的10颗语法糖
  8. 【Lucene4.8教程之四】分析
  9. 去除Coding4Fun中MessagePrompt的边框(Border)
  10. Android手机上监听短信的两种方式
  11. Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2)
  12. HADOOP再进阶:本地Yum软件源安装Cloudera Manager 5
  13. Impossible WPF Part 2: Binding Expressions
  14. Batch Normalization
  15. java中List&lt;Map&lt;String, Object&gt;&gt;关于null的判断
  16. 网络爬虫之html2md
  17. 关于事务回滚,rollback tran到底要不要写?
  18. 安装saltstack使用的shell
  19. MySQL MySql连接数与线程池
  20. redis哈希缓存数据表

热门文章

  1. go语言之---数组(array)和切片(slice)
  2. CAD插件
  3. 第2.2节 Python的语句
  4. moviepy音视频剪辑VideoClip类fl_image方法image_func报错ValueError: assignment destination is read-only解决办法
  5. Python中容器指的是什么?
  6. Python基础教程目录
  7. PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围
  8. CSS初识- 选择器 &amp;背景&amp; 浮动&amp; 盒子模型
  9. SA-IS学习笔记
  10. day013|python之模块02&amp;目录01