String matching basics in Data Structures Theory - Time & Space Complexity
When we search for a smaller word or pattern inside a bigger text, we want to know how long it takes as the text grows.
We ask: How does the time to find the pattern change when the text gets longer?
Analyze the time complexity of the following code snippet.
function simpleMatch(text, pattern) {
for (let i = 0; i <= text.length - pattern.length; i++) {
let j = 0;
while (j < pattern.length && text[i + j] === pattern[j]) {
j++;
}
if (j === pattern.length) {
return i; // pattern found at index i
}
}
return -1; // pattern not found
}
This code checks each position in the text to see if the pattern starts there by comparing characters one by one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking characters of the pattern against the text at each possible start position.
- How many times: The outer loop runs roughly (text length - pattern length + 1) times, and the inner loop runs up to the pattern length times for each outer loop.
As the text gets longer, the number of places to check grows, and for each place, we may compare many characters.
| Input Size (text length n) | Approx. Operations |
|---|---|
| 10 | Up to 10 x pattern length comparisons |
| 100 | Up to 100 x pattern length comparisons |
| 1000 | Up to 1000 x pattern length comparisons |
Pattern observation: The work grows roughly in a straight line with the text length multiplied by the pattern length.
Time Complexity: O(n × m)
This means the time to find the pattern grows proportionally to the text length times the pattern length.
[X] Wrong: "The search always takes time proportional only to the text length."
[OK] Correct: Because for each position in the text, we may need to check many characters of the pattern, so the pattern length also affects the time.
Understanding how searching text works helps you explain and improve basic algorithms, a useful skill in many coding challenges and real projects.
"What if we used a more advanced algorithm that skips some checks? How would the time complexity change?"
Practice
string matching in computer science?Solution
Step 1: Understand the definition of string matching
String matching is about checking if a smaller text (pattern) exists inside a larger text (text).Step 2: Compare options with the definition
Only To find if a smaller text appears inside a bigger text describes this goal correctly; others describe different string operations.Final Answer:
To find if a smaller text appears inside a bigger text -> Option BQuick Check:
String matching = find smaller text inside bigger text [OK]
- Confusing string matching with sorting strings
- Thinking string matching counts characters
- Mixing string matching with case conversion
pattern exists in text using Python?Solution
Step 1: Recall Python syntax for substring check
In Python, the correct syntax to check if one string is inside another is using theinkeyword.Step 2: Evaluate each option
Only if pattern in text: uses the correct Python syntax. Options A, B, and D are not valid Python statements.Final Answer:
if pattern in text: -> Option AQuick Check:
Python substring check uses 'in' keyword [OK]
- Using incorrect keywords like 'contains' or 'has'
- Writing invalid syntax like 'inside'
- Confusing method calls with keywords
text = "hello world" pattern = "world" print(pattern in text)
Solution
Step 1: Understand the 'in' operator in Python
The expressionpattern in textchecks if the string 'world' is inside 'hello world'.Step 2: Check if 'world' is a substring of 'hello world'
Since 'world' appears at the end of 'hello world', the expression returns True.Final Answer:
True -> Option CQuick Check:
'world' in 'hello world' = True [OK]
- Assuming output is the substring itself
- Confusing True/False output
- Expecting an error due to syntax
text = "data structures"
pattern = "structure"
if pattern in text:
print("Found")Solution
Step 1: Check Python syntax for if statement
Python requires the code inside an if block to be indented properly.Step 2: Inspect the print statement indentation
The print statement is not indented, causing an indentation error.Final Answer:
Indentation error in the print statement -> Option AQuick Check:
Python blocks need indentation [OK]
- Ignoring indentation rules in Python
- Assuming 'in' operator is wrong
- Changing variable names unnecessarily
"ana" appears in the text "banana". Which of the following lists shows the correct starting indices (0-based)?Solution
Step 1: Identify occurrences of 'ana' in 'banana'
Check each substring of length 3 in 'banana': 'ban'(0), 'ana'(1), 'nan'(2), 'ana'(3), 'na'(4 incomplete).Step 2: List starting indices where substring matches 'ana'
'ana' appears starting at index 1 and index 3.Final Answer:
[1, 3] -> Option DQuick Check:
Positions of 'ana' in 'banana' = [1, 3] [OK]
- Counting overlapping matches incorrectly
- Using 1-based instead of 0-based indices
- Missing one of the occurrences
Ready to prove it?
Pass the test and this pattern moves unknown
