首页 > 其他 > 详细

LeetCode-Longest Substring with At Most K Distinct Characters

时间:2016-08-05 13:58:24      阅读:267      评论:0      收藏: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.

Analysis:

Adding ith char into current substring, keep tracking the number of each char in the current substring, if the distinct number constraint is violated, we move the start forward until the contraint is satisfied.

Solution:

 1 public class Solution {
 2     public int lengthOfLongestSubstringKDistinct(String s, int k) {
 3         if (s.isEmpty() || k==0) return 0;
 4         
 5         HashMap<Character,Integer> charMap = new HashMap<Character,Integer>();
 6         int start = 0, end = 1, distNum = 1;
 7         charMap.put(s.charAt(0),1);
 8         
 9         int res = 1;
10         while (end<s.length()){
11             char cEnd = s.charAt(end);
12             if (charMap.containsKey(cEnd)){
13                 charMap.put(cEnd,charMap.get(cEnd)+1);
14             } else {
15                 charMap.put(cEnd,1);
16                 distNum++;
17                 while (distNum>k){
18                     char cStart = s.charAt(start);
19                     int val = charMap.get(cStart)-1;
20                     if (val==0){
21                       distNum--;
22                       charMap.remove(cStart);
23                     } else charMap.put(cStart,val);
24                     start++;
25                 }
26             }
27             end++;
28             res = Math.max(end-start,res);
29         }
30         return res;
31     }
32 }

 

LeetCode-Longest Substring with At Most K Distinct Characters

原文:http://www.cnblogs.com/lishiblog/p/5740921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!