由于不能出现重复的,所以用map记录字符值和它出现的位置,就可以很容易判断出字符上次出现的位置。
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int lengthOfLongestSubstring(string s){
map<char,int> m;
int lastRepeated=-1,max_length=0;
for(int i=0;i<s.size();i++){
//如果该字符是重复的,则更新它最后一次出现的位置
if(m.find(s[i])!=m.end()&&lastRepeated<m[s[i]]){
lastRepeated=m[s[i]];
}
if(i-lastRepeated>max_length){
max_length=i-lastRepeated;
}
m[s[i]]=i;
}
return max_length;
}
int main(){
string s;
cin>>s;
cout<<lengthOfLongestSubstring(s)<<endl;
}