File tree 1 file changed +9
-8
lines changed 1 file changed +9
-8
lines changed Original file line number Diff line number Diff line change 23
23
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
24
24
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
25
25
*/
26
-
27
26
var lengthOfLongestSubstring = function ( str ) {
28
27
if ( str . length === 1 ) {
29
28
return 1
@@ -32,24 +31,26 @@ var lengthOfLongestSubstring = function(str) {
32
31
var windows = [ 0 , 0 ]
33
32
var max = 0
34
33
35
- // 出现过的字符保存在set中 便于匹配是否出现过此字符串
36
- var set = new Set ( )
37
34
for ( var i = 0 ; i < str . length ; i ++ ) {
38
35
var char = str [ i ]
39
36
40
- // 如果匹配过了这个字符 窗口左边界+1
41
- if ( set . has ( char ) ) {
42
- windows [ 0 ] ++
37
+ // 当前窗口中的文字
38
+ var windowsStr = str . substring ( windows [ 0 ] , windows [ 1 ] )
39
+
40
+ // 窗口中如果已经出现了这个文字 就需要把窗口左侧移动到「上一次出现这个文字」的右边位置
41
+ var windowsCharIdx = windowsStr . indexOf ( char )
42
+ if ( windowsCharIdx !== - 1 ) {
43
+ // 注意要加上窗口左侧已经移动的距离
44
+ windows [ 0 ] += windowsCharIdx + 1
43
45
}
44
46
45
- // 右边界一直后移
47
+ // 右边界始终后移
46
48
windows [ 1 ] ++
47
49
48
50
var windowsLength = windows [ 1 ] - windows [ 0 ]
49
51
if ( windowsLength > max ) {
50
52
max = windowsLength
51
53
}
52
- set . add ( char )
53
54
}
54
55
55
56
return max
You can’t perform that action at this time.
0 commit comments