博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Longest Substring Without Repeating Characters
阅读量:5815 次
发布时间:2019-06-18

本文共 2676 字,大约阅读时间需要 8 分钟。

     对于这道题目我最开始的想法是用一个list来保存字符串中的元素,先遍历字符串中的字符,若该字符没有在list中则将该字符添加到list中,若有重复的字符则将该list清空。但没有考虑到一个问题,此时遍历的索引应该回到第一次出现重复字符的下一个字符处,好了问题来了,list中无法找到该字符的索引信息

    那么我又想到第二个方法,用hashmap来保存字符串中字符的值及其相应位置,然后用相应的思想,代码如下:

   

HashMap
map = new HashMap
(); int maxlen = 0; for (int i = 0; i < s.length(); i++) { int k=i+1; if (map.containsKey(s.charAt(i))) { if (maxlen < map.size()) { maxlen = map.size(); } i=map.get(s.charAt(i)); map.clear(); } else map.put(s.charAt(i), i); } int listLen = map.size(); if (maxlen > listLen) return maxlen; else return listLen;

测试无误后进行提交,发现有时间限制,因此需要换另外一种方法

用HashSet容器来维护一个窗口,首先遍历字符串,将没有重复的字符丢到HashSet中,平时用两个指针,runner指针用来维护当前遍历的元素,walker指针用来表示出现重复字符的第一个字符的下一个。

1 HashSet
set = new HashSet
(); 2 int walker = 0; 3 int runner = 0; 4 int max = 0; 5 while (runner < s.length()) { 6 if (set.contains(s.charAt(runner))) { 7 if (max < runner - walker) { 8 max = runner - walker; 9 }10 while (s.charAt(walker) != s.charAt(runner)) {11 if(set.contains(s.charAt(walker)))12 {13 set.remove(s.charAt(walker));14 }15 walker++;16 }17 walker++;18 } else {19 set.add(s.charAt(runner));20 }21 runner++;22 }23 max = Math.max(max, runner - walker);24 return max;

但有一个问题,不知道为什么把hashset换成list就会报越界的错误

转载于:https://www.cnblogs.com/criseRabbit/p/4071664.html

你可能感兴趣的文章
01-构造和运行模块
查看>>
opennebula 开发记录
查看>>
knockoutjs 之 subscribe 的小分享
查看>>
ubuntu 修改hostname
查看>>
【译】UNIVERSAL IMAGE LOADER.PART 2---ImageLoaderConfiguration详解
查看>>
工作笔记00
查看>>
javascript call()
查看>>
sql 内联,左联,右联,全联
查看>>
C++关于字符串的处理
查看>>
6、Web Service-拦截器
查看>>
面试题: 数据库 oracle数据库 已看1 意义不大 有用
查看>>
Flask 源码流程,上下文管理
查看>>
最大子序列和最大子矩阵
查看>>
Ad Hoc Distributed Queries / xp_cmdshell 的启用与关闭
查看>>
How to set spring boot active profiles with maven profiles
查看>>
jsp中对jstl一些标签的引用方式
查看>>
数据库战略高度解析(3) ODBC
查看>>
一段有意思的代码:类实现中将信息存储到其他位置
查看>>
程序员编程艺术第二十一~二章:发帖水王及扩展,与最短摘要生成(12.07修订)...
查看>>
vSphere networking features: distributed vSwitches; private VLANs; IPv6
查看>>