1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     int lengthOfLongestSubstring(string s) 
12     {
13         vector<int> v(128,-1);
14         int coll=-1,res=0;
15         int i=0;
16         for(char c:s)
17         {
18             if(v[c]!=-1)
19                 coll=(coll>v[c]? coll:v[c]);
20             v[c]=i;
21             res=max(res,i-coll);
22             i++;
23         }
24         return res;
25     }
26 };

用普通顺序容器来做,速度较快

上述方法为下标做差求长度,扫描字符串时,标记当前重复元素最大下标,用当前下标减去最大重复元素下标即可

也可以用双指针,一个指针向前扫,扫到重复元素时,另一个指针跟进至重复元素,将重复元素以前的所有元素在容器中的对应值减一。

posted on 2018-07-03 13:07  高数考了59  阅读(106)  评论(0)    收藏  举报