數據結構——滑動窗口Leetcode3尋找最大的連續不重複子串

Leetcode 3  尋找最大的連續不重複子串
第一種方法
class Solution {
public: int lengthOfLongestSubstring(string s) {
	if (s.length() == 0) return 0; int l = 0; int r = 0; //[l...r]包含了當前最大長度的不重複連續子串 
	int max_length = 1; 
	while (l < s.length() && (r+1) <s.length()) 
	{ 
		string sub_str = s.substr(l, r - l + 1); 
		int pos = sub_str.find(s[r + 1]); //r和子串中的字符重複,找到子串中的相同字符k,l=k+1,r++ 
		if ( pos!=string::npos) 
		{ 
			cout << pos << endl; 
			l =l+ pos + 1; 
			cout << "l:" << l << endl; 
			r++; 
		} 
		else //r和子串中的字符不重複,r++ 
		{ 
			r++; 
			cout <<"r:"<< r << endl; 
			if (max_length < (r - l + 1)) max_length = r - l + 1;
		} 
	} 
	return max_length; 
} 
};


 第二種方法
class Solution {
public:int lengthOfLongestSubstring(string s) {
	if (s.length() == 0)
		return 0; 
	int freq[256] = { 0 }; 
	int l = 0; int r = -1; //[l...r]包含了當前最大長度的不重複連續子串
	int max_length = 0;
	while (l < s.length())
	{
		if (r + 1<s.length()&&freq[s[r + 1]] == 0)//如果下一個元素的頻率爲0,也就是沒有在之前的子串中出現過
		{
			r++;
			freq[s[r]]++;
		}
		else //如果出現過,l向前移動一位 L不是應該移到重複的位置之前嗎?
		{
			freq[s[l]]--;
			l++;
		}
		max_length = max(max_length, r - l + 1);
	}
	return max_length;
}
};


發佈了64 篇原創文章 · 獲贊 32 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章