最长不重复字串-map容器做法更易理解

给定一个字符串,找到最长的子串,要求该子串中没有重复的字符。

例如:

字符串abcabcbb的不含重复字符的 最长 子串为abc,长度为 3。

而bbbbbb的不含重复字符的 最长 子串为b,长度为 1。

思路都是一样的:记录一个数的初始位置。如果后面出现了同样的字符,就从这个字符下一个相同的位置往下找。

#include<iostream>
using namespace std;
#include<map>
#include<algorithm>
int lengthOfLongestSubstring(string s);
int main()
{
	string str = "abcagee";
	int max_len = lengthOfLongestSubstring(str);
	cout << max_len << endl;

	return 0;
}

//如果出现了。先把之前记录的上一个字符 的位置传给pre。之后m[s[i]]=i会更新当前的位置
int lengthOfLongestSubstring(string s) {
	map<char, int> mp;
	for (int i = 0; i < s.length(); i++)
		mp[s[i]] = -1;//初始化哈希表
	int pre = -1, Max = 0;
	for (int i = 0; i < s.length(); i++) {
		pre = max(pre, mp[s[i]]);
		Max = max(Max, i - pre);
		mp[s[i]] = i;
	}
	return Max;
}

おすすめ

転載: blog.csdn.net/qq_40861091/article/details/100887397
おすすめ