Bird
0
0
DSA Cprogramming~20 mins

Substring Search Patterns in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Substring Search Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Naive Substring Search
What is the output of the following code that searches for the pattern "ana" in the text "banana" using a naive substring search?
DSA C
const char* text = "banana";
const char* pattern = "ana";

for (int i = 0; text[i] != '\0'; i++) {
    int j = 0;
    while (pattern[j] != '\0' && text[i + j] == pattern[j]) {
        j++;
    }
    if (pattern[j] == '\0') {
        printf("%d ", i);
    }
}
printf("\n");
A0 2
B1 2 3
C2 4
D1 3
Attempts:
2 left
💡 Hint
Check each position in the text where the pattern matches fully.
Predict Output
intermediate
2:00remaining
Output of KMP Prefix Table Construction
What is the output array (prefix table) constructed by the KMP algorithm for the pattern "ABABAC"?
DSA C
int prefix[] = {0, 0, 0, 0, 0, 0};
char pattern[] = "ABABAC";
int len = 0;
for (int i = 1; pattern[i] != '\0'; i++) {
    while (len > 0 && pattern[i] != pattern[len]) {
        len = prefix[len - 1];
    }
    if (pattern[i] == pattern[len]) {
        len++;
        prefix[i] = len;
    }
}
for (int i = 0; i < 6; i++) {
    printf("%d ", prefix[i]);
}
printf("\n");
A0 0 1 2 3 1
B0 1 0 1 2 0
C0 0 1 2 3 0
D0 0 1 2 0 1
Attempts:
2 left
💡 Hint
The prefix table stores the length of the longest proper prefix which is also suffix for each prefix of the pattern.
🔧 Debug
advanced
2:00remaining
Identify the error in Rabin-Karp hash update
What error will occur when running this Rabin-Karp rolling hash update code snippet for substring search?
DSA C
int base = 256;
int prime = 101;
int h = 1;
int pattern_len = 3;
for (int i = 0; i < pattern_len - 1; i++) {
    h = (h * base) % prime;
}
int text_hash = 0;
int pattern_hash = 0;
char text[] = "abcd";
char pattern[] = "bcd";
for (int i = 0; i < pattern_len; i++) {
    pattern_hash = (base * pattern_hash + pattern[i]) % prime;
    text_hash = (base * text_hash + text[i]) % prime;
}
// Update hash for next window
text_hash = (base * (text_hash - text[0] * h) + text[pattern_len]) % prime;
if (text_hash < 0) text_hash += prime;
printf("%d\n", text_hash);
ARuntime error: array index out of bounds
BNo error, prints 31
CWrong hash value due to missing parentheses
DNegative hash value without correction
Attempts:
2 left
💡 Hint
Check the calculation of the rolling hash and the array indices used.
Predict Output
advanced
2:00remaining
Output of Boyer-Moore Bad Character Table
What is the value of bad character table entry for character 'c' in the pattern "abcabc" using Boyer-Moore preprocessing?
DSA C
int badChar[256];
char pattern[] = "abcabc";
int m = 6;
for (int i = 0; i < 256; i++) {
    badChar[i] = -1;
}
for (int i = 0; i < m; i++) {
    badChar[(unsigned char)pattern[i]] = i;
}
printf("%d\n", badChar['c']);
A5
B2
C-1
D3
Attempts:
2 left
💡 Hint
The bad character table stores the last occurrence index of each character in the pattern.
🧠 Conceptual
expert
2:00remaining
Minimum number of comparisons in substring search
Which substring search algorithm guarantees the minimum worst-case number of character comparisons for searching a pattern of length m in a text of length n?
AKnuth-Morris-Pratt (KMP) algorithm
BNaive substring search algorithm
CRabin-Karp algorithm
DBoyer-Moore algorithm
Attempts:
2 left
💡 Hint
Consider worst-case linear time complexity and character comparisons.