3. 无重复字符的最长子串

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

最初始的解法方法就是遍历暴力每个元素,然后以那个元素为起始点,然后进行判断是否出现了重复元素,这样时间的复杂度就是O(n2),这样的时间复杂度有点高,基本上已经预定了时间超出限制。所以我们要用别的解法方法。 
那么比较好的解决方法就是用 双指针的思想,这题其实把握了思想还是挺简单的,要保证无重复的的,一般会先想到HashSet,可以保证数组的字符的唯一性。 
设置一左一右两个指针,每次我们都移动右指针,如果右边的指针中的元素在Set中存在了,那么就要开始根据已经存在的元素移动左边指针了。同时我们要把左右指针里面的元素所在的索引值(index)给保存下来。 
代码还是很好理解的:

show the code

 public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) return 0;
Set<Character> set = new HashSet<>();
LinkedList<Integer> list = new LinkedList<>();
char[] charsArray = s.toCharArray();
int left = 0;
int res = 0;
for (int right = 0, len = charsArray.length; right < len; ++right) {
if (set.contains(charsArray[right])) {
res = Math.max(res, right - left);
while (set.contains(charsArray[right])) {
int index = list.removeFirst();
set.remove(charsArray[index]);
}
list.addLast(right);
left = list.getFirst();
set.add(charsArray[right]);
} else if (right == len - 1) {
res = Math.max(res, right - left + 1);
} else {
set.add(charsArray[right]);
list.addLast(right);
}
}
return res;
}

时间复杂度O(n),空间复杂度O(n)。

最新文章

  1. 查linux端口连接情况用命令netstat
  2. Linux内核--网络栈实现分析(十)--网络层之IP协议(下)
  3. Python序列化之json与pickle
  4. python数学运算的类型转换
  5. hbase读写流程
  6. maven插件开发(二)
  7. cocos2d-x学习日志(10) --射击游戏(喵星战争)
  8. Acer VN7 Win10小键盘修改
  9. 块和内嵌div和span
  10. mybatis基础学习2---(resultType和resultMap的用法和区别)和setting的用法
  11. Enable multi-tenancy on ironic
  12. EasyUI Parser 解析器
  13. imp 导入报错
  14. Python之模块和包
  15. Day032--Python--操作系统, process进程
  16. 20165237 2017-2018-2 《Java程序设计》第8周学习总结
  17. python学习之旅(十五)
  18. 【转载】Ubuntu安装之,硬盘分区
  19. Vue项目中如何使用Element-UI以及如何使用sass
  20. 本地Navicat连不上Linux虚拟机MySQL数据库问题

热门文章

  1. git(二)
  2. IM即时通讯:如何跳出传统思维来设计聊天室架构?
  3. Kafka 学习之路(五)—— 深入理解Kafka副本机制
  4. 【小记整理】mybatis配置多个扫描路径写法
  5. 【朝花夕拾】Android自定义View篇之(五)Android事件分发机制(上)Touch三个重要方法的处理逻辑
  6. 通用shell函数库
  7. 跟着大彬读源码 - Redis 2 - 服务器如何响应客户端请求?(上)
  8. POJ 3318:Matrix Multiplication(随机算法)
  9. 性能测试即服务-docker部署jmeter及.netcore应用
  10. leetcode 141 Linked List Cycle Hash fast and slow pointer