Bird
Raised Fist0
DSA C#programming~10 mins

String Pattern Matching Naive in DSA C# - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to get the length of the pattern string.

DSA C#
int patternLength = pattern.[1];
Drag options to blanks, or click blank then click option'
ACount
BLength
CSize
DLength()
Attempts:
3 left
💡 Hint
Common Mistakes
Using Length() as if it were a method.
Using Count which is not a string property.
2fill in blank
medium

Complete the code to compare characters of text and pattern at given indices.

DSA C#
if (text[i + j] == pattern.[1]) {
Drag options to blanks, or click blank then click option'
A[j]
BLength
CElementAt(j)
DSubstring
Attempts:
3 left
💡 Hint
Common Mistakes
Using Substring which returns a string, not a character.
Using ElementAt without importing LINQ.
3fill in blank
hard

Fix the error in the loop condition to avoid going out of bounds in the text string.

DSA C#
for (int i = 0; i <= text.Length - [1]; i++) {
Drag options to blanks, or click blank then click option'
Apattern.Length + 1
Bpattern.Length * 2
Cpattern.Length - 1
Dpattern.Length
Attempts:
3 left
💡 Hint
Common Mistakes
Using pattern.Length + 1 which causes index out of range.
Using pattern.Length - 1 which misses some valid positions.
4fill in blank
hard

Fill both blanks to complete the inner loop that checks each character of the pattern against the text.

DSA C#
for (int j = 0; j < [1]; j++) {
    if (text[i + j] != pattern.[2]) {
        break;
    }
}
Drag options to blanks, or click blank then click option'
Apattern.Length
Btext.Length
C[j]
D[i]
Attempts:
3 left
💡 Hint
Common Mistakes
Using text.Length for the loop limit which is incorrect.
Accessing pattern with [i] instead of [j].
5fill in blank
hard

Fill all three blanks to complete the naive pattern matching function that returns the first index of the pattern in the text or -1 if not found.

DSA C#
public static int NaiveSearch(string text, string pattern) {
    int n = text.Length;
    int m = pattern.[1];
    for (int i = 0; i <= n - m; i++) {
        int j;
        for (j = 0; j < m; j++) {
            if (text[i + j] != pattern.[2]) {
                break;
            }
        }
        if (j == [3]) {
            return i;
        }
    }
    return -1;
}
Drag options to blanks, or click blank then click option'
ALength
B[j]
Cm
D[i]
Attempts:
3 left
💡 Hint
Common Mistakes
Using [i] instead of [j] to access pattern characters.
Comparing j to n instead of m.
Using Length() as a method instead of property.

Practice

(1/5)
1. What is the main idea behind the naive string pattern matching algorithm?
easy
A. Check every possible position in the text to find the pattern
B. Use a hash function to find the pattern quickly
C. Build a prefix table to skip unnecessary comparisons
D. Sort the text and pattern before matching

Solution

  1. Step 1: Understand naive matching approach

    The naive algorithm tries to match the pattern starting at every position in the text.
  2. Step 2: Compare with other methods

    Other methods like hashing or prefix tables are not used in naive matching.
  3. Final Answer:

    Check every possible position in the text to find the pattern -> Option A
  4. Quick Check:

    Naive = Check all positions [OK]
Hint: Naive means try all positions one by one [OK]
Common Mistakes:
  • Confusing naive with hashing or prefix methods
  • Thinking naive skips positions
  • Assuming sorting is involved
2. Which of the following is the correct syntax to start a loop for naive pattern matching in C# if text length is n and pattern length is m?
easy
A. for (int i = 0; i <= n; i++)
B. for (int i = 0; i < n; i++)
C. for (int i = 0; i < m; i++)
D. for (int i = 0; i <= n - m; i++)

Solution

  1. Step 1: Determine loop range for pattern matching

    The loop must run from 0 to n - m inclusive to avoid overflow when matching pattern of length m.
  2. Step 2: Check each option

    for (int i = 0; i <= n - m; i++) correctly uses i <= n - m. Others either go beyond or are too short.
  3. Final Answer:

    for (int i = 0; i <= n - m; i++) -> Option D
  4. Quick Check:

    Loop till n - m inclusive [OK]
Hint: Loop till n - m to fit pattern fully [OK]
Common Mistakes:
  • Looping till n causes index out of range
  • Looping till m is too short
  • Using < instead of <= misses last position
3. What will be the output of the following C# code snippet?
string text = "abcabcabc";
string pattern = "abc";
int count = 0;
for (int i = 0; i <= text.Length - pattern.Length; i++) {
    int j;
    for (j = 0; j < pattern.Length; j++) {
        if (text[i + j] != pattern[j])
            break;
    }
    if (j == pattern.Length)
        count++;
}
Console.WriteLine(count);
medium
A. 1
B. 2
C. 3
D. 0

Solution

  1. Step 1: Identify pattern occurrences in text

    The pattern "abc" appears at positions 0, 3, and 6 in the text "abcabcabc".
  2. Step 2: Count matches in the loop

    The inner loop confirms full matches at these positions, so count increments 3 times.
  3. Final Answer:

    3 -> Option C
  4. Quick Check:

    Pattern occurs 3 times [OK]
Hint: Count full matches by checking all pattern chars [OK]
Common Mistakes:
  • Counting partial matches
  • Off-by-one errors in loop limits
  • Breaking early without counting
4. The following code tries to implement naive pattern matching but does not work correctly. What is the bug?
string text = "hellohello";
string pattern = "lo";
int count = 0;
for (int i = 0; i < text.Length - pattern.Length; i++) {
    int j;
    for (j = 0; j < pattern.Length; j++) {
        if (text[i + j] != pattern[j])
            break;
    }
    if (j == pattern.Length)
        count++;
}
Console.WriteLine(count);
medium
A. The outer loop should use <= instead of < to include last position
B. The inner loop should start from 1 instead of 0
C. The pattern length is not used correctly
D. The count variable is not initialized

Solution

  1. Step 1: Analyze loop boundary

    The outer loop runs from 0 to text.Length - pattern.Length - 1, missing the last valid start position.
  2. Step 2: Correct loop condition

    Changing < to <= ensures the last possible position is checked for pattern match.
  3. Final Answer:

    The outer loop should use <= instead of < to include last position -> Option A
  4. Quick Check:

    Loop boundary off by one [OK]
Hint: Use <= to cover last possible start index [OK]
Common Mistakes:
  • Using < causes missing last match
  • Changing inner loop start breaks matching
  • Ignoring initialization of count
5. Given a text "ababababab" and a pattern "abab", how many times will the naive pattern matching algorithm find the pattern if overlapping matches are counted?
hard
A. 2
B. 4
C. 3
D. 5

Solution

  1. Step 1: Identify all overlapping matches

    The pattern "abab" appears starting at indices 0, 2, 4, and 6 in the text "ababababab".
  2. Step 2: Count total matches including overlaps

    Counting all these positions gives 4 matches.
  3. Final Answer:

    4 -> Option B
  4. Quick Check:

    Overlapping matches counted = 4 [OK]
Hint: Check every position, count overlaps too [OK]
Common Mistakes:
  • Ignoring overlapping matches
  • Counting only non-overlapping occurrences
  • Miscounting start indices
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