思路:
哈希表 ,字符当做键值,字符串的下标当做实值;哈希表初始化值为-1
map<char,int> //char字符,int表示字符在字符串中的下标
每个字符对应的最长字符串长度:为当前字符位置减去上一个出现该字符的位置
#include<iostream>
#include<map>
#include<string>
using namespace std;
int getLongestSubString(const 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); //当前字符对应不重复子串的长度为i-pre
mp[s[i]] = i; //字符当前位置
}
return Max;
}
int main(){
//string s = "abcdabefgh";
string str;
getline(cin,str);
cout << getLongestSubString(str)<<endl;
}