整体思路:
一个结点维护一个int,代表到当前位置的最大无重复字符串长度;
维护一个string,用来存储当前位置字符向前算最长的无重复字符串

public:
class Solution {
public:

int lengthOfLongestSubstring(string str)
{    
    if(str==" ")
        return 1;
    vector<int> vec(str.length());
    vec[0]=1;

    string s(str,0,1);
    for(int i=1;i<str.length();i++)
    {
        int pos,num_t=vec[i-1];
        string str_t;
        if((pos=s.find(str[i]))==-1)//找不到
        {
            str_t=s+str[i];
        }
        else
        {
            str_t=s.substr(pos+1)+str[i];
        }
        if(str_t.length()>num_t)
            num_t=str_t.length();

        s=str_t;
        vec[i]=num_t;
    }
    return vec[str.length()-1];
}
};
};