💬 Strings
String Builder
Build strings efficiently in a loop — never use + inside loops
Concatenating strings with + inside a loop is O(n²) in most languages because each step copies the whole string. Use a builder or collect into a list, then join once at the end.
Language:
Python
Loading...
All languages — Build in loop
JavaScript
// JS: array + join is the idiomatic builder
const parts = [];
for (let i = 0; i < 5; i++) {
parts.push(String(i));
}
const result = parts.join("");
console.log(result); // "01234"
// Reverse a string
const s = "hello";
const rev = s.split("").reverse().join("");
console.log(rev); // "olleh"TypeScript
const parts: string[] = [];
for (let i = 0; i < 5; i++) {
parts.push(String(i));
}
const result = parts.join("");
console.log(result);
const s = "hello";
const rev = s.split("").reverse().join("");
console.log(rev);Java
// Java: StringBuilder — O(n) instead of O(n²)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append(i);
}
System.out.println(sb.toString()); // "01234"
// Reverse
sb.reverse();
System.out.println(sb.toString()); // "43210"
// Useful methods
sb.append("x");
sb.deleteCharAt(sb.length() - 1);
sb.charAt(0);
sb.length();
sb.insert(0, "!"); // insert at index
System.out.println(new StringBuilder("hello").reverse().toString());Go
package main
import (
"fmt"
"strings"
)
func main() {
// Go: strings.Builder (zero alloc per append)
var sb strings.Builder
for i := 0; i < 5; i++ {
fmt.Fprintf(&sb, "%d", i)
}
fmt.Println(sb.String()) // "01234"
// Reverse a string
s := "hello"
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
fmt.Println(string(runes)) // "olleh"
}C++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
// C++: just use string, += is amortized O(1) with reserve
string result;
result.reserve(5);
for (int i = 0; i < 5; i++) {
result += to_string(i);
}
cout << result << endl; // "01234"
// Reverse
string s = "hello";
reverse(s.begin(), s.end());
cout << s << endl; // "olleh"
}