String search functions (strpos, strstr) in PHP - Time & Space Complexity
When we use string search functions like strpos or strstr, we want to know how long they take as the string gets bigger.
We ask: How does the time to find a substring grow when the string length grows?
Analyze the time complexity of the following code snippet.
$string = "Hello, this is a simple example string.";
$search = "simple";
$pos = strpos($string, $search);
if ($pos !== false) {
echo "Found at position: $pos";
} else {
echo "Not found.";
}
This code looks for the position of a smaller string inside a bigger string.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each character in the main string to see if the search string starts there.
- How many times: Up to once for each character in the main string until the substring is found or the string ends.
As the main string gets longer, the function may check more characters to find the substring.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 checks |
| 100 | Up to 100 checks |
| 1000 | Up to 1000 checks |
Pattern observation: The number of checks grows roughly in direct proportion to the string length.
Time Complexity: O(n*m)
This means the time to find the substring grows roughly in proportion to the product of the length of the main string (n) and the length of the substring (m).
[X] Wrong: "String search is always instant, no matter how long the string is."
[OK] Correct: The function may need to check many characters one by one, so longer strings usually take more time.
Understanding how string search time grows helps you explain efficiency clearly and shows you know how basic functions behave with bigger data.
"What if we searched for multiple different substrings one after another? How would the time complexity change?"
Practice
strpos do?Solution
Step 1: Understand the purpose of strpos
Thestrposfunction searches for the first occurrence of a substring inside another string and returns its position.Step 2: Compare with other options
Options A, B, and C describe different string functions likestrtoupper,strstr, andstr_replace, which are not whatstrposdoes.Final Answer:
Finds the position of a substring inside a string -> Option CQuick Check:
strpos = position finder [OK]
- Confusing strpos with strstr
- Thinking strpos extracts substring
- Assuming strpos replaces text
$text = 'concatenate' using strpos?Solution
Step 1: Identify correct parameter order for strpos
The first parameter is the full string, the second is the substring to find. Sostrpos($text, 'cat')is correct.Step 2: Check other options for errors
strpos('concatenate', 'cat') uses a string literal instead of the variable. strpos('cat', $text) reverses parameters. strpos($text) misses the second parameter.Final Answer:
strpos($text, 'cat') -> Option DQuick Check:
strpos(string, substring) [OK]
- Swapping the order of parameters
- Omitting the substring argument
- Passing substring as first argument
$text = 'hello world';
$pos = strpos($text, 'world');
echo $pos;
Solution
Step 1: Find the position of 'world' in 'hello world'
The string 'hello world' has 'world' starting at index 6 (counting from 0).Step 2: Understand what strpos returns
strpos returns the starting position of the substring, so it returns 6.Final Answer:
6 -> Option AQuick Check:
Position of 'world' in 'hello world' = 6 [OK]
- Counting from 1 instead of 0
- Confusing position with length
- Expecting boolean true instead of position
$fruit. What is the error?$fruit = 'pineapple';
if (strpos($fruit, 'apple')) {
echo 'Found';
} else {
echo 'Not found';
}
Solution
Step 1: Understand strpos return values
strpos returns 0 if the substring is found at the start (index 0). In PHP, 0 is treated as false in conditions.Step 2: Analyze the if condition behavior
The conditionif (strpos(...))fails when strpos returns 0, so it wrongly goes to else.Final Answer:
strpos returns 0 for 'apple' position, which is treated as false -> Option BQuick Check:
Check strpos !== false to avoid 0 as false [OK]
- Using if(strpos()) without strict false check
- Assuming strpos returns boolean true/false only
- Ignoring 0 as valid position
$sentence = 'The quick brown fox jumps', which code snippet correctly extracts the substring starting from the word 'brown' using strstr?Solution
Step 1: Understand strstr behavior
strstr returns the part of the string starting from the first occurrence of the substring, including it.Step 2: Analyze options
echo strstr($sentence, 'brown'); correctly uses strstr to get substring from 'brown'. echo strstr($sentence, 'brown', true); returns part before 'brown'. echo strpos($sentence, 'brown'); returns position, not substring. echo substr($sentence, strpos($sentence, 'brown')); uses substr with strpos, which also works but is not strstr.Final Answer:
echo strstr($sentence, 'brown'); -> Option AQuick Check:
strstr returns substring from needle [OK]
- Using third parameter true to get substring after needle
- Confusing strpos with strstr
- Expecting strpos to return substring
Ready to prove it?
Pass the test and this pattern moves unknown
