class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char,int> mymap;
int length =s.length();
int *p = (int *)malloc(sizeof(int)*(length+1));
memset(p,0,sizeof(int)*(length+1));
int max = 0;
int begin_site = 1;
for(int i=0;i<length;i++)
{
if(!mymap[s.at(i)])
{
mymap[s.at(i)] = i+1;
p[i+1] = p[i] + 1;
if(p[i+1]>max)
max = p[i+1];
}else
{
if(mymap[s.at(i)]<begin_site)
{
p[i+1] = p[i] + 1;
if(p[i+1]>max)
max = p[i+1];
}else
{
begin_site = mymap[s.at(i)];
p[i+1] = i+1 - mymap[s.at(i)];
if(p[i+1]>max)
max = p[i+1];
}
mymap[s.at(i)] = i+1;
}
}
return max;
}
};
想了一天才做出来,超级开心O(∩_∩)O~~ ,注意记录子串的其实位置,并与重复出现位置进行比较!