计算字符串中最长子字符串的长度

 var lengthOfLongestSubstring = function(s) {
        var tmp = [];
        var max = 0;
        var i=0,j=0,n=s.length;
        while (j < n){
            if( tmp.hasOwnProperty(s[j])){
               if( i <= tmp[s[j]]){
                   i = tmp[s[j]];
               }
            }
            if(max <= (j-i+1)){
                max = j-i+1;
            }
            tmp[s[j]] = j+1;
            j++;
        }
        return max;
    };

用一个 hash table 来存储字符以及字符对应下标。

s[j]  在[i,j)中存在重复的字符,那么可以将 i 移到 重复字符下标的下一个位置。

例如:‘abcefcda'

i一开始为0,j向后移动,当j=5时(即s[5]=c)判断得出有重复元素,i就 应该赋值为tmp['c']中的位置(注意tmp['c']保存的时是c元素的下一个元素的下标 )

原文地址:https://www.cnblogs.com/neverleave/p/5947749.html