题目大意:找出某个字符串无重复字符的最大子串的长度。(只要求找长度)
首先一看到了字符串我的第一想法就是dp,可是我找不出递推关系,所以需要转换思路了。
首先我们先来考虑一下样例,abcabcbb,我们要找无重复字符的最大子串,怎么找?我们需要记录一下每个字符在之前出现了没有,查找是否出现最常用的是什么?哈希表啊!所以锁定map,那么我们就好写代码了!
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
#include<unordered_map>
using namespace std;
int main()
{
string a;
cin>>a;
unordered_map<char,int>temp;
int left=-1;
int res=0;
int num=(int)a.size();
for(int i=0;i!=num;++i)
{
if(temp.count(a[i])&&left<temp[a[i]])
{
left=temp[a[i]];
}
temp[a[i]]=i;
res=max(res,i-left);
}
cout<<res<<endl;
}