求最长非重复子串

 

求最长非重复子串

 

求最长非重复子串。

 

如:

“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); 
}

  

 

posted @ 2017-10-10 15:20  zhang--yd  阅读(220)  评论(0编辑  收藏  举报