通过类似于滑动窗口的思路
#include <stdio.h>
#include <string>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
// static int x = [](){
// return 0;
// }();
// static int x = []()
// {ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();
class Solution {
private:
map<char, int> m;
public:
int max(int a, int b) {
return a > b ? a : b;
}
int lengthOfLongestSubstring(string s) {
int maxL = 0, tmpI;
if (s.size() <= 0) return maxL;
int i = 0, j = 0;
while (j < s.size()) {
if (m.count(s[j]) > 0) {
tmpI = m[s[j]];
for (; i < tmpI; ++i) {
m.erase(s[i]);
}
i = tmpI + 1;
}
m[s[j]] = j;
maxL = max(j - i + 1, maxL);
++j;
}
return maxL;
}
};
int main() {
Solution s ;
vector<int> v;
string str("abcdefg");
int l = s.lengthOfLongestSubstring(str);
printf("%d ", l);
// vector<int>::iterator it;
// for (it = res.begin(); it != res.end(); ++it) {
// printf("%d ", *it);
// }
return 0;
}