String Traversal and Character Access in DSA Javascript - Time & Space Complexity
We want to understand how long it takes to look at each letter in a word or sentence.
How does the time grow when the word gets longer?
Analyze the time complexity of the following code snippet.
const str = "hello world";
for (let i = 0; i < str.length; i++) {
const char = str[i];
console.log(char);
}
This code goes through each letter in the string and prints it out one by one.
- Primary operation: Accessing each character in the string one by one.
- How many times: Exactly once for each character in the string.
As the string gets longer, the number of steps grows in the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 character accesses |
| 100 | 100 character accesses |
| 1000 | 1000 character accesses |
Pattern observation: The work grows directly with the length of the string.
Time Complexity: O(n)
This means the time to finish grows in a straight line as the string gets longer.
[X] Wrong: "Accessing characters inside a string is instant and does not depend on string length."
[OK] Correct: Even though each access is quick, you still have to do it for every character, so total time grows with string length.
Understanding how time grows when reading strings helps you explain and improve code that works with text data.
"What if we only accessed every other character in the string? How would the time complexity change?"
Practice
str[2] return when str = "hello"?Solution
Step 1: Understand zero-based indexing in strings
Strings in JavaScript start counting characters from index 0, so index 2 is the third character.Step 2: Identify the character at index 2 in "hello"
The characters are: h(0), e(1), l(2), l(3), o(4). So index 2 is 'l'.Final Answer:
The third character of the string, which is 'l' -> Option BQuick Check:
str[2] = 'l' [OK]
- Thinking index 2 is the second character
- Confusing string length with character access
- Believing strings can't be indexed like arrays
text in JavaScript?Solution
Step 1: Check the loop range and indexing
The loop should start at 0 and go up to less than text.length to cover all characters.Step 2: Verify character access inside the loop
Accessing characters by text[i] is correct. for (let i = 0; i < text.length; i++) { console.log(text[i]); } uses this correctly.Final Answer:
for (let i = 0; i < text.length; i++) { console.log(text[i]); } -> Option AQuick Check:
Loop from 0 to length-1 and access text[i] [OK]
- Starting loop at 1 instead of 0
- Using text[char] when char is a character, not index
- Accessing index i+1 causing off-by-one errors
const s = "world";
let result = "";
for (let i = 0; i < s.length; i++) {
if (i % 2 === 0) {
result += s[i];
}
}
console.log(result);Solution
Step 1: Understand the loop and condition
The loop goes from 0 to 4 (length 5). It adds characters at even indexes (0,2,4) to result.Step 2: Identify characters at even indexes
Index 0: 'w', 2: 'r', 4: 'd'. So result becomes "wrd".Final Answer:
"wrd" -> Option AQuick Check:
Characters at even indexes = "wrd" [OK]
- Including characters at odd indexes
- Confusing index positions with characters
- Appending characters incorrectly
word on a new line, but it prints an extra undefined. What is the problem?const word = "test";
for (let i = 0; i <= word.length; i++) {
console.log(word[i]);
}Solution
Step 1: Analyze the loop condition
The loop runs from i = 0 to i = word.length (which is 4). Index 4 is out of bounds for string indices 0-3.Step 2: Identify the fix
Change the condition to i < word.length to avoid accessing undefined index.Final Answer:
The loop condition should bei < word.lengthinstead of <= -> Option DQuick Check:
Loop must stop before length to avoid undefined index [OK]
i < length not <= to avoid out-of-bounds [OK]- Using <= instead of < in loop condition
- Thinking strings can't be indexed
- Ignoring off-by-one errors
inputStr, which code snippet correctly reverses the string by traversing it from the end to the start?Solution
Step 1: Understand string indexing and loop bounds
String indices go from 0 to length-1. To reverse, start at length-1 down to 0 inclusive.Step 2: Check each option's loop and indexing
let reversed = ''; for (let i = inputStr.length - 1; i >= 0; i--) { reversed += inputStr[i]; } loops from length-1 to 0 inclusive and appends characters correctly. Others have off-by-one errors or wrong indices.Final Answer:
let reversed = ''; for (let i = inputStr.length - 1; i >= 0; i--) { reversed += inputStr[i]; } -> Option CQuick Check:
Loop backward from last index to 0 and append chars [OK]
- Using wrong loop bounds causing missing first/last char
- Accessing index equal to length (out of bounds)
- Stopping loop before reaching index 0
Ready to prove it?
Pass the test and this pattern moves unknown
