💬 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"
}