Leetcode 第三题 | Longest Substring Without ..| Javascript

题目

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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值