Find the minimum window in a string containing all characters of another string | CODING INTERVIEW ARCHIVES



Find the minimum window in a string containing all characters of another string | CODING INTERVIEW ARCHIVES

Given a set of characters S and an input string STR, problem is to find the smallest window in STR which will contain all the characters in S. Both, S and STR can have repeated occurrences of a given character.

Approach:

The algorithm follows a sliding window approach. We maintain two hash maps, toFind and hasFound, both of whose sizes are 256 (maximum number of characters possible).
Value in toFind denotes the number of occurrences of that character in S.
There is a variable cnt, which is initialized to 0. This denotes the number of characters in S that have been found so far in STR.
Iterate through the length of STR.
For each character found, increase by 1 the value of hasFound of that character. If the character has a hasFound value still less than its toFind value, increase the cnt by 1.
If the value of cnt equals the size of S, or in other words, all characters of S are found in STR, we try to slide the window towards the right. This is done by removing the leftmost characters which are not in S, or which have a hasFound value greater that toFind value.
If after removing the unwanted characters, the window length becomes smaller than previously found window length, update it. (Initialize the window length to INT_MAX)

Read full article from Find the minimum window in a string containing all characters of another string | CODING INTERVIEW ARCHIVES


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts