
读了题我们发现这个算法在设计阶段就有一些难度,怎么才能得到不重复的子串,总么最高效简单的移动,不浪费对比次数呢。
首先一个一个取,拼接,在没遇见重复字符前,我们都是一样的处理方式,对比是否重复,不重复就拼接,重复了咋办呢?
我们来观察第一个例子串
abcabcbb 第一个重复是这样的
我们拿到了
abc
准备把下一个a接上,发现a里面已经有了,那我们需要去掉一部分来让我们手里的这个串没有重复的,把前面的a去掉,新加的a接上于是有了
bca
下一位是b,我们的子串也已经有了,那么我们去掉b,接上新的b
cab
一次类推知道最后,翻译成代码就是,遇见重复的,删除左侧重复字符及重复字符前的内容,拼接新内容
每次删除的时候统计一下当时子串的长度,最后最长的保留。这就是我的初步算法

还不错打败了94%的demo
然后我看了一下最高效的代码,我看之前就像,会不会还是用了hash,结果这货还真用了,这次他是使用了字符编码作为索引,建立了一个hash数组,这样查找效率就提升了,确实很有技巧很高效,附上最快运行速度的代码。
