求最长非重复子串
求最长非重复子串
求最长非重复子串。
如:
“abcabcab” 的最长是 abc
"AAAA" 的最长是 A
要求是:输入最先出现的最长非重复子串。
string MaxLenSubstr(string s){
if(s.length() <= 1){
return s;
}
int vis[128] = {0};
int ans = 0, ans_p = 0, tmp = 0, tmp_p = 0;
for(int i=0; i<s.length(); ++i){
if(vis[ s[i] ]==0 || i - vis[ s[i] ] >= tmp ){
++tmp;
}else if(i - vis[ s[i] ] < tmp){
tmp = i - vis[ s[i] ];
tmp_p = vis[ s[i] ] + 1;
}
vis[ s[i] ] = i;
if(tmp > ans){
ans = tmp;
ans_p = tmp_p;
}
}
return s.substr(ans_p, ans);
}

浙公网安备 33010602011771号