📢 Too many exams? Don’t know which one suits you best? Book Your Free Expert 👉 call Now!


    Question

    In the Knuth-Morris-Pratt (KMP) algorithm, the Longest

    Proper Prefix Suffix (LPS) array lps[] is crucial. When pat[i] and pat[len] match, len is incremented and lps[i] is set to len. What happens when pat[i] and pat[len] *do not* match and len is not 0? void computeLPSArray(char* pat, int M, int* lps) {     int len = 0;     lps[0] = 0;     int i = 1;     while (i < M) {         if (pat[i] == pat[len]) {             len++;             lps[i] = len;             i++;         } else { // (pat[i] != pat[len])             if (len != 0) {                 _________; // Line to complete             } else { // if (len == 0)                 lps[i] = 0;                 i++;             }         }     } }
    A len = 0; Correct Answer Incorrect Answer
    B len = lps[len - 1]; Correct Answer Incorrect Answer
    C i++; Correct Answer Incorrect Answer
    D lps[i] = len; Correct Answer Incorrect Answer
    E len = len - 1; Correct Answer Incorrect Answer

    Solution

    • Concept: The Knuth-Morris-Pratt (KMP) algorithm uses a precomputed Longest Proper Prefix Suffix (LPS) array to efficiently search for a pattern within a text. The LPS array lps[i] stores the length of the longest proper prefix of pat[0...i] that is also a suffix of pat[0...i]. • Code Analysis: o The while loop builds the lps array. o When pat[i] == pat[len], len is incremented, and lps[i] is set to the new len. o When pat[i] != pat[len] and len != 0, it means the current character pat[i] does not extend the current prefix-suffix match. We need to "fall back" to a shorter possible prefix-suffix match. • Explanation of Correct Answer (B): len = lps[len - 1]; o When pat[i] does not match pat[len], and len is not 0, it means we had a prefix of length len that matched a suffix. Since pat[i] doesn't extend this match, we look for the next shortest proper prefix of pat[0...len-1] that is also a suffix of pat[0...len-1]. The length of this next shortest match is precisely stored in lps[len - 1]. By setting len = lps[len - 1], we effectively shift our comparison point in the pattern to try and find a shorter matching prefix.

    Practice Next
    ask-question