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 };
用普通顺序容器来做,速度较快
上述方法为下标做差求长度,扫描字符串时,标记当前重复元素最大下标,用当前下标减去最大重复元素下标即可
也可以用双指针,一个指针向前扫,扫到重复元素时,另一个指针跟进至重复元素,将重复元素以前的所有元素在容器中的对应值减一。
浙公网安备 33010602011771号