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; }
相关文章推荐
- 关于 this android sdk requires android developer...错误的解决办法
- distinct sequence Google
- UITouch 触摸事件处理(实例)
- UI高级第二课  多线程和GCD——iOS学习连载30
- UI高级第一课  block语法——iOS学习连载29
- Java工程(3)——但从谈论用户的角度UI图案
- iOS学习总结----UIScrollView的常用属性及方法
- UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
- *LeetCode-Implement Stack using Queues
- Xcode6中segue取消原push与modal选项后新增选项的解释
- LeetCode-Implement Queue using Stacks
- iOS UI基础-7.0 UIScrollView
- 调用删除方法UITableView deleteRowsAtIndexPaths的时候就挂掉
- ZOJ 3892 Available Computation Sequence
- word frequency
- range for query
- POJ - 2524 Ubiquitous Religions(并查集)
- 队列queue
- iOS开发 - UISearchController实现搜索功能
- Xcode的SVN提示"The request timed out."的解决方案