String concatenation and repetition in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the time needed to join or repeat strings changes as the strings get longer or the repetition count grows.
How does the work grow when we add more pieces or repeat more times?
Analyze the time complexity of the following code snippet.
def repeat_and_concat(s, n):
result = ""
for _ in range(n):
result += s
return result
This code repeats a string s n times by adding it to a result string in a loop.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding the string
storesultinside the loop. - How many times: The loop runs
ntimes, each time concatenating strings.
Each time we add s to result, the whole result string is copied to make space for the new addition. So the work grows more than just n times.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 55 times length of s |
| 100 | About 5050 times length of s |
| 1000 | About 500500 times length of s |
Pattern observation: The work grows roughly like the square of n, because each addition copies a longer string.
Time Complexity: O(n² * m) where m is the length of s
This means the time needed grows roughly with the square of the number of repetitions times the length of the string, making it slower as n gets bigger.
[X] Wrong: "Adding a string n times in a loop is just O(n) because the loop runs n times."
[OK] Correct: Each addition copies the whole growing string, so the work adds up more than just n times. The string gets longer each time, making concatenation slower.
Understanding how string operations grow helps you write faster code and explain your choices clearly. It shows you think about how your program behaves as data grows.
What if we used a list to collect strings and joined them once at the end? How would the time complexity change?
Practice
+ operator do when used with strings in Python?Solution
Step 1: Understand the
In Python,+operator with strings+combines two strings by joining them end to end.Step 2: Compare with other options
Repeating strings uses*, uppercase uses.upper(), splitting uses.split().Final Answer:
Joins two strings together into one -> Option AQuick Check:
String + String = Joined String [OK]
- Confusing + with * for repetition
- Thinking + changes string case
- Assuming + splits strings
'hi' 3 times in Python?Solution
Step 1: Identify the repetition operator
In Python,*repeats a string when multiplied by an integer.Step 2: Check other options
'hi' + 3causes TypeError (can't add string and int).3 'hi'is SyntaxError (missing * operator).'hi' ** 3causes TypeError (** is for exponents, not string repetition).Final Answer:
'hi' * 3 -> Option BQuick Check:
String * Number = Repeated String [OK]
- Using + instead of * for repetition
- Trying to use ** which is invalid for strings
- Placing number before string without *
result = 'ab' + 'cd' * 2 print(result)
Solution
Step 1: Evaluate the repetition part
'cd' * 2 repeats 'cd' twice, resulting in 'cdcd'.Step 2: Concatenate strings
'ab' + 'cdcd' joins to form 'abcdcd'.Final Answer:
abcdcd -> Option DQuick Check:
'ab' + ('cd' * 2) = 'abcdcd' [OK]
- Adding strings before repeating
- Repeating the whole concatenated string
- Miscounting repeated parts
text = 'go' * '3' print(text)
Solution
Step 1: Identify the operands of the * operator
The code tries to multiply a string 'go' by another string '3'.Step 2: Understand Python's type rules for * operator
Python allows string * integer but not string * string, causing a TypeError.Final Answer:
TypeError because string cannot be multiplied by string -> Option AQuick Check:
String * String = TypeError [OK]
- Using quotes around number for repetition
- Assuming implicit conversion to int
- Ignoring error messages
'yes' 4 times, separated by a dash -. Which code produces 'yes-yes-yes-yes'?Solution
Step 1: Understand the desired output
The string should be 'yes-yes-yes-yes' with 3 dashes separating 4 'yes'.Step 2: Analyze each option
('yes-' * 4)[:-1] repeats 'yes-' 4 times: 'yes-yes-yes-yes-' then removes last dash with [:-1]. 'yes-' * 4 leaves trailing dash. '-'.join('yes' * 4) joins characters, not words. 'yes' + '-' * 3 adds only one dash.Final Answer:
('yes-' * 4)[:-1] -> Option CQuick Check:
Repeat with dash, then remove last dash [OK]
- Leaving extra dash at end
- Joining characters instead of words
- Adding fewer dashes than needed
