您的位置:首页 > 产品设计 > UI/UE

Find the longest substring with k unique distinct characters in a given string (Google)

2015-09-16 09:03 429 查看
The problem can be solved in O(n). Idea is to maintain a window and add elements to the window till it contains less or equal k, update our result if required while doing so. If unique elements exceeds than required in window, start removing the elements from left side.

Use a hashmap to maintain the set of distinct char in the sliding window and the count, maintain the starting index of the


public static String unique2CharSubstring(String str, int k) {
String result = "";
int len = str.length();
HashMap<character, integer=""> map = new HashMap<character, integer="">();
char[] c = str.toCharArray();
int right = 0, max = 0;
LinkedList<character> queue = new LinkedList<character>();
//dont use the queue here, use hashmap with a count
for (int left = 0; left < len; left++) {
while (right < len) {
if (!map.containsKey(c[right])) {
queue.add(c[right]);
}
map.put(c[right], right);
if (map.size() > k) {
left = Math.max(left, map.get(queue.peek()) + 1);
map.remove(queue.pop());
}
if (right - left > max) {
max = right - left;
result = str.substring(left, right + 1);
}
right++;
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: