340. Longest Substring with At Most K Distinct Characters

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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容