美文网首页
340. Longest Substring with At M

340. Longest Substring with At M

作者: 怪味儿果叔 | 来源:发表于2017-01-05 12:17 被阅读0次

Given a string, find the length of the longest substring T that contains at most k distinct characters.
For example, Given s = “eceba” and k = 2, T is "ece" which its length is 3.


int lengthOfLongestSubstringKDistinct(string s, int k){
  if(k == 0 || s.length() == 0) return 0;
  vector<int> dict(256, 0);
  int count = 0, maxLength = 0, start = 0;
  for(int i = 0; i < s.length(); i++){
    dict[s[i]]++;
    if(i == 0 || s[i] == s[i-1] || count < k) {
      if(dict[s[i]] == 1) count++;
      continue;
    }
    // k+1 distinctive char
    if((count == k && dict[s[i]] == 1)){
      maxLength = max(maxLength,i-start);
      while(start <= i){
        dict[s[start]]--;
        if(dict[s[start]] == 0) break;
        start++;
      }
      start++;
    }
  }
  return maxLength > (s.length() - start) ? maxLength : s.length() - start;
}

相关文章

网友评论

      本文标题:340. Longest Substring with At M

      本文链接:https://www.haomeiwen.com/subject/zzczvttx.html