Bird
Raised Fist0
DSA Javaprogramming~5 mins

KMP Pattern Matching Algorithm in DSA Java - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does KMP stand for in the KMP Pattern Matching Algorithm?
KMP stands for Knuth-Morris-Pratt, the last names of the three computer scientists who developed this efficient pattern searching algorithm.
Click to reveal answer
beginner
What is the main advantage of the KMP algorithm over the naive pattern matching approach?
KMP avoids rechecking characters that have already been matched by using a precomputed 'Longest Prefix Suffix' (LPS) array, making the search faster especially for large texts.
Click to reveal answer
intermediate
What is the purpose of the LPS (Longest Prefix Suffix) array in KMP?
The LPS array stores the length of the longest proper prefix of the pattern that is also a suffix for each prefix of the pattern. It helps to decide how much to shift the pattern when a mismatch occurs.
Click to reveal answer
intermediate
In KMP, what happens when a mismatch occurs after some matches?
Instead of restarting from the next character in the text, KMP uses the LPS array to shift the pattern to the right position, avoiding unnecessary comparisons.
Click to reveal answer
intermediate
What is the time complexity of the KMP Pattern Matching Algorithm?
The time complexity is O(n + m), where n is the length of the text and m is the length of the pattern. This is because each character is processed at most twice.
Click to reveal answer
What does the LPS array represent in the KMP algorithm?
AIndex of the first match in text
BLongest prefix which is also suffix for pattern prefixes
CNumber of mismatches found
DLength of the pattern
What is the main benefit of using the KMP algorithm over naive search?
AIt uses less memory
BIt finds all matches instantly
CIt works only on sorted text
DIt avoids rechecking matched characters
If a mismatch occurs at pattern index 3, what does KMP use to decide the next comparison?
AUse LPS array to shift pattern
BSkip the character in text
CRestart from pattern index 0
DStop the search
What is the worst-case time complexity of KMP algorithm?
AO(n + m)
BO(n^2)
CO(n*m)
DO(m^2)
Which of the following is NOT true about the KMP algorithm?
AIt preprocesses the pattern before searching
BIt can handle overlapping patterns
CIt restarts matching from the beginning on mismatch
DIt uses an auxiliary array called LPS
Explain how the LPS array is constructed and how it helps in the KMP algorithm.
Think about longest prefix and suffix matches within the pattern itself.
You got /3 concepts.
    Describe the step-by-step process of searching a pattern in text using the KMP algorithm.
    Imagine scanning text and pattern together, and how you avoid rechecking characters.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the KMP (Knuth-Morris-Pratt) algorithm in string processing?
      easy
      A. To count the number of vowels in a string
      B. To sort characters in a string alphabetically
      C. To reverse a string in linear time
      D. To efficiently find occurrences of a pattern within a text

      Solution

      1. Step 1: Understand KMP's goal

        KMP algorithm is designed to search for a pattern inside a larger text efficiently.
      2. Step 2: Compare with other options

        Sorting, reversing, or counting vowels are unrelated to pattern searching.
      3. Final Answer:

        To efficiently find occurrences of a pattern within a text -> Option D
      4. Quick Check:

        KMP = Pattern Searching [OK]
      Hint: KMP is about fast pattern search, not string modification [OK]
      Common Mistakes:
      • Confusing KMP with sorting algorithms
      • Thinking KMP reverses strings
      • Assuming KMP counts characters
      2. Which of the following is the correct way to initialize the prefix array (lps) in the KMP algorithm in Java?
      easy
      A. int[] lps = new int[pattern.length()];
      B. int lps[] = new int[pattern.length() + 1];
      C. int lps = new int[pattern.length()];
      D. int[] lps = new int[pattern.length() - 1];

      Solution

      1. Step 1: Check array declaration syntax

        In Java, arrays are declared with type[], e.g., int[] lps.
      2. Step 2: Check array size correctness

        Prefix array size equals pattern length, so new int[pattern.length()] is correct.
      3. Final Answer:

        int[] lps = new int[pattern.length()]; -> Option A
      4. Quick Check:

        Correct Java array init = int[] lps = new int[pattern.length()]; [OK]
      Hint: Use int[] lps = new int[pattern.length()] for prefix array [OK]
      Common Mistakes:
      • Using incorrect array size (too big or too small)
      • Wrong syntax like int lps instead of int[] lps
      • Adding unnecessary +1 or -1 to length
      3. What will be the output of the following Java code snippet using KMP to search pattern "ABABC" in text "ABABABCABABC"?
      String text = "ABABABCABABC";
      String pattern = "ABABC";
      List<Integer> result = KMPSearch(pattern, text);
      System.out.println(result);
      Assume KMPSearch returns a list of starting indices where pattern is found.
      medium
      A. [1, 6]
      B. [0, 5]
      C. [2, 7]
      D. [3, 8]

      Solution

      1. Step 1: Identify pattern occurrences in text

        Check text "ABABABCABABC" for "ABABC" starting indices: - At index 0: substring "ABABA" does not match fully - At index 2: substring "ABABC" matches fully - At index 5: substring "CABAB" does not match - At index 6: substring "ABABC" matches fully Actually, the pattern "ABABC" occurs at indices 2 and 7, but index 7 is out of range for the second match. Re-examining carefully: - At index 0: substring "ABABA" partial - At index 5: substring "CABAB" no - At index 6: substring "ABABC" matches - At index 7: substring "BABC" incomplete So matches at indices 2 and 6.
      2. Step 2: Confirm no other matches

        Other indices do not match the full pattern exactly.
      3. Final Answer:

        [2, 6] -> Option B
      4. Quick Check:

        Pattern found at indices 2 and 6
      Hint: Scan text for exact pattern start indices [OK]
      Common Mistakes:
      • Off-by-one errors in indexing
      • Confusing partial matches as full matches
      • Assuming matches start at 0 or 1 incorrectly
      4. Consider this snippet of KMP prefix array (lps) computation in Java:
      int len = 0;
      int i = 1;
      while (i < pattern.length()) {
        if (pattern.charAt(i) == pattern.charAt(len)) {
          len++;
          lps[i] = len;
          i++;
        } else {
          if (len != 0) {
            len = lps[len - 1];
          } else {
            lps[i] = 0;
            i++;
          }
        }
      }
      What is the bug in this code?
      medium
      A. Should increment i before assigning lps[i]
      B. len should be reset to 0 instead of lps[len - 1]
      C. No bug; code correctly computes lps array
      D. Missing initialization of lps array before loop

      Solution

      1. Step 1: Analyze lps computation logic

        This code follows the standard KMP prefix array logic: - Increment len and assign lps[i] when chars match - Reset len using lps[len-1] when mismatch and len != 0 - Assign 0 and increment i when len == 0
      2. Step 2: Verify no missing steps

        Initialization of lps array is assumed done before; loop logic is correct.
      3. Final Answer:

        No bug; code correctly computes lps array -> Option C
      4. Quick Check:

        Standard KMP lps logic = No bug; code correctly computes lps array [OK]
      Hint: Standard KMP lps code is correct as given [OK]
      Common Mistakes:
      • Thinking i must increment before lps assignment
      • Resetting len incorrectly to 0 instead of lps[len-1]
      • Forgetting to initialize lps array before loop
      5. Given the pattern "AABAACAABAA" and text "AABAACAABAABAABA", how many times will the KMP algorithm find the pattern in the text? Assume zero-based indexing and full matches only.
      hard
      A. 2
      B. 1
      C. 3
      D. 4

      Solution

      1. Step 1: Search for pattern occurrences in text

        Check text "AABAACAABAABAABA" for pattern "AABAACAABAA": - At index 0: substring matches pattern fully - At index 7: substring "AABAACAABAA" matches fully - Other indices do not match fully
      2. Step 2: Confirm matches

        Two full matches found at indices 0 and 7.
      3. Final Answer:

        2 -> Option A
      4. Quick Check:

        Pattern appears twice fully [OK]
      Hint: Count only full pattern matches in text [OK]
      Common Mistakes:
      • Counting partial matches as full matches
      • Missing the first match at index 0
      • Assuming overlapping partial matches count
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard