问题: 求一个字符串中的最长无重复子串,或者说求一个数组中最长的无重复子数组(都是一种意思)
输入:abcdedafg
输出:5
解释:abcde这是一个最长的无重复子串,同理edafg也是。所以最长的无重复子串是5
也就是以下图中题目示意:
方法一:借助unordered_set和left,right指针
算法思想:left指针开始的时候指向set中的第一个元素。right向后遍历,遍历到的数字如果set中没有则加进myset中,同时全局变量统计出现无重复元素的最大值;如果right遍历到v[i]时,set中存在此数,则set中要从left指针的位置开始释放,直到释放掉次数的时候,再将v[i]加入进set中,继续往后遍历。 这样,全局变量就可以在过程中统计出现的无重复次数,所以O(N)的复杂度就可以完成。
算法实现:
int main()
{
int n = 0;
int left = 0;
int right = 0;
int result = 0;
cin >> n;
vector<int> v(n);
unordered_set<int> myset;
for (int i = 0; i < n; i++)
{
cin >> v