3. Longest Substring Without Repeating Characters
problem description
Given a string, find the length of the longest substring without repeating characters.
example
algorithm thought
第三遍做这个题了,首先看到题目就觉得应该用快慢指针做。定义一个快指针,每次让快指针先走,快指针每走一步记录走过的字符。如果出现快指针走过的字符之前出现过一次,就让慢指针走。慢指针每走一步,擦除一个记录,如果擦出的刚好是快指针当前的字符,慢指针停止,又轮到快指针走。快指针每走一步计算一次快慢指针之差,最后返回最大的差值就行。
然而我看我第二次做的记录,发现第二次的方法更好(大概律是看discuss的),每次不是记录出现的次数,而是记录字符的位置,每次碰到重复的可以直接跳转到相应的位置,而不是一次次慢慢走。
code
algorithm analysis
首先分析快慢指针,快慢指针最坏情况是所有字符一样,最好情况是所有字符都不同。在输入为n的情况下,最坏情况需要运行2n次,最好情况需要运行n次。最好最坏都是O(n)的时间复杂度。
记录位置的方法:只有一个循环,不管什么清况都是运行n次,时间复杂度是O(n)。
综合来看还是第二种方法更好
Last updated