题目

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

思路

初始令i=1,ptr=0,开始遍历i;
每遍历一个i,检查第i个之前的字符串有没有和s[i]相同的;
如果有 index就会小于i 那么令 ptr = index + 1;
即ptr是和s[i]相同的那个s[index]的下一个.
这时候s[ptr]和s[i]之间一个相同的字符串也没有,不然的话.
假设小于i的某个值和ptr代表的值重复,那么那个时候ptr就是当前的ptr了
每做完这么一步,更新max.
...不知大家有明白吗..
不明白的话,理解一些indexOf和charAt函数的用法,实验几个例子,肯定就会了!

解法:

var lengthOfLongestSubstring  =  function(s)  {
    if (s.length <= 1)
        return s.length;
    
    let max = 1;
    let ptr = 0;
    
    for (let i = 1; i < s.length; i++) {
        let index = s.indexOf(s.charAt(i), ptr);
        if (index < i) {
            ptr = index + 1;
        }
        max = Math.max(max, i-ptr+1);
    } 
    return max;
};

Mystery_Wen
12 声望1 粉丝