dp[i]代表以s[i]结尾的最长无重复字符的子串
class Solution {
public:
int check(string& str,int start, int end,char c){
return str.substr(start,end-start+1).find(c);
}
int lengthOfLongestSubstring(string s) {
if(s.empty()) return 0;
//int len=s.size();
//int dp[len];
vector<int> dp(s.size());
dp[0]=1;
int max=1;
for(int i=0;i<s.size()-1;i++){
int ret=check(s,i-dp[i]+1,i,s[i+1]);
if(ret==-1){
dp[i+1]=dp[i]+1;
}else{
dp[i+1]=dp[i]-ret;
}
if(dp[i+1]>max) max=dp[i+1];
}
return max;
}
};