题目
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
记录暂时的最大长度、扫描中的子串中各个字符的序号、子串的头、子串的尾。
子串尾从头开始向后扫一次:
1、如果字符未在子串中出现过,考虑目前子串长度是否超过暂时的最大
2、如果出现过,将子串头到上次出现该字符之间的字符都标记为未出现,子串头变为上次出现位置之后的那个位置
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
long pos[128]; //记录相应字符的位置,-1表示不再扫描的子串上
for(int i=0;i<128;i++)
pos[i]=-1;
long max=0; //最大长度
long first=0,last=0; //扫描中的子串的头、尾
while(last<s.size())
{
if(pos[s[last]]==-1)
{
pos[s[last]]=last;
last++;
if(last-first>max)
max=last-first;
}
else
{
while(first<=pos[s[last]])
pos[s[first++]]=-1;
pos[s[last]]=last;
last++;
}
}
return max;
}
};