求最长非重复子串
求最长非重复子串
求最长非重复子串。
如:
“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); }