File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #include < iostream>
2+ #include < vector>
3+ #include < map>
4+ #include < iterator>
5+ using namespace std ;
6+
7+ class Solution {
8+ public:
9+ int lengthOfLongestSubstring (string s) {
10+ int len = s.length ();
11+ if (len == 0 ) return 0 ;
12+ vector<int > prev (len);
13+ map<char , int > mp;
14+ map<char , int >::iterator itr;
15+ for (int i = 0 ; i < len; ++i) {
16+ itr = mp.find (s[i]);
17+ if (itr == mp.end ()) prev[i] = -1 ;
18+ else prev[i] = mp[s[i]];
19+ mp[s[i]] = i;
20+ }
21+ int ret = 1 , add = 0 ;
22+ for (int i = len - 1 ; i >= 0 ; --i) {
23+ int p = prev[i];
24+ if (p == -1 ) {
25+ ++add;
26+ ret = max (ret, add);
27+ continue ;
28+ }
29+ if (i - p + add <= ret) {
30+ add = 0 ;
31+ continue ;
32+ }
33+ for (int j = i - 1 ; j > p; --j) {
34+ if (prev[j] > p) p = prev[j];
35+ }
36+ ret = max (ret, i - p + add);
37+ add = 0 ;
38+ }
39+ return ret;
40+ }
41+ };
You can’t perform that action at this time.
0 commit comments