计算字符串中最长子字符串的长度
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元素的下一个元素的下标 )