String methods (substring, split, trim) in Kotlin - Time & Space Complexity
When working with strings, it is important to know how long operations like cutting parts, splitting, or cleaning spaces take.
We want to understand how the time needed grows as the string gets longer.
Analyze the time complexity of the following code snippet.
val text = " apple, banana, cherry, date "
val trimmed = text.trim()
val parts = trimmed.split(",")
val firstFruit = parts[0].substring(1, 4)
This code trims spaces, splits the string by commas, and extracts a substring from the first part.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The
splitmethod scans the entire string once to find commas. - How many times: It looks at each character once, so it runs about n times, where n is the string length.
As the string gets longer, the time to trim and split grows roughly in direct proportion to its length.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks for trim and split |
| 100 | About 100 checks for trim and split |
| 1000 | About 1000 checks for trim and split |
Pattern observation: The work grows steadily as the string length increases.
Time Complexity: O(n)
This means the time needed grows in a straight line with the string length.
[X] Wrong: "Splitting a string is instant and does not depend on its length."
[OK] Correct: The split method must check each character to find separators, so it takes longer for longer strings.
Understanding how string methods work under the hood helps you write efficient code and answer questions about performance clearly.
"What if we used a regular expression with split instead of a simple character? How would the time complexity change?"
Practice
trim() method do when called on a string?Solution
Step 1: Understand the purpose of
Thetrim()trim()method removes whitespace characters from the beginning and end of a string.Step 2: Compare with other string methods
Unlikesplit()orsubstring(),trim()does not split or extract parts but cleans spaces around the string.Final Answer:
Removes spaces from the start and end of the string -> Option DQuick Check:
trim() removes outer spaces [OK]
- Thinking trim() splits the string
- Confusing trim() with substring()
- Assuming trim() changes case
text?Solution
Step 1: Recall Kotlin substring syntax
The correct method call issubstring(startIndex, endIndex)where endIndex is exclusive.Step 2: Check each option
text.substring(2..5) uses a range which is invalid for substring. text.subString(2, 5) has wrong capitalization. text.substring(2, 6) uses 6 as endIndex which extracts more characters than asked.Final Answer:
text.substring(2, 5) -> Option CQuick Check:
substring(start, end) uses exclusive end [OK]
- Using range syntax inside substring
- Wrong method name capitalization
- Confusing inclusive vs exclusive end index
val data = " apple, banana , cherry "
val fruits = data.trim().split(",")
println(fruits[1].trim())Solution
Step 1: Apply trim() on the original string
Callingtrim()removes spaces at start and end, so string becomes "apple, banana , cherry".Step 2: Split by comma and trim the second element
Splitting by "," gives ["apple", " banana ", " cherry"]. Then trimming the second element " banana " removes spaces, resulting in "banana".Final Answer:
banana -> Option BQuick Check:
trim() cleans spaces after split [OK]
- Not trimming after split, leaving spaces
- Assuming split trims automatically
- Confusing index positions in list
val sentence = "Hello World" val part = sentence.substring(6, 5) println(part)
Solution
Step 1: Check substring parameters
substring(startIndex, endIndex) requires startIndex ≤ endIndex. Here, startIndex=6 and endIndex=5, which is invalid.Step 2: Understand Kotlin substring behavior
This causes an exception because the end index is less than the start index.Final Answer:
substring end index is less than start index causing error -> Option AQuick Check:
substring end must be ≥ start [OK]
- Assuming substring indexes are inclusive
- Using end index less than start index
- Thinking substring accepts one argument only
input = " red, green , blue , yellow ", write Kotlin code to create a list of trimmed color names without spaces. Which code snippet correctly achieves this?Solution
Step 1: Split the string by commas
Usingsplit(",")breaks the string into parts including spaces.Step 2: Trim spaces from each part
Usingmap { it.trim() }removes spaces from each color name, producing a clean list.Step 3: Evaluate other options
input.trim().split(",") trims only the ends before splitting, so inner spaces remain. input.split(",").trim() tries to trim a list, which is invalid. input.trim().map { it.split(",") } trims the whole string then maps incorrectly.Final Answer:
input.split(",").map { it.trim() } -> Option AQuick Check:
Split then trim each part for clean list [OK]
- Trimming before split only removes outer spaces
- Trying to trim a list directly
- Incorrect chaining of methods
Ready to prove it?
Pass the test and this pattern moves unknown
