logo

String

Palindrome

while (lo < hi) {
    if s[lo] != s[hi]
    lo++;
    hi--;
}

Reverse a string

void reverse(char* str)
{
    char *low = str,  *high = str;
    while (*high != '\0') {
        high++;
    }
    high--;
    while (low < high){
        char tmp = *low;
        *low++ = *high;
        *high-- = tmp;
    }
}

Levenshtein Distance

public static int LevenshteinDistance(char[] a, char[] b){

    int [][] cnt = new int[a.length + 1][b.length + 1];
    for (int i = 0; i <= a.length; i++) {
        cnt[i][0] = i;
    }
    for (int i = 0; i <= b.length; i++) {
        cnt[0][i] = i;
    }
    for (int i = 1; i <= a.length; i++) {
        for (int j = 1; j<= b.length; j++){
            if (a[i-1] == b[j-1])
                cnt[i][j] = cnt[i-1][j-1];
            else {
                int smallest = cnt[i-1][j-1] + 1;
                if (cnt[i-1][j] + 1 < smallest)
                    smallest = cnt[i-1][j] + 1;
                if (cnt[i][j-1] + 1 < smallest)
                    smallest = cnt[i][j-1] + 1;
                cnt[i][j] = smallest;
            }
        }
    }
    return cnt[a.length][b.length];
}

String Comparison

C++

string::operator==() is equivalent to string::compare()

str1 == str2

Substring

JavaScript

str.substring(startIndex, endIndex);
  • startIndex: required, inclusive
  • endIndex: optional, exclusive

StartsWith / EndsWith

C++

#include "absl/strings/match.h"
absl::StartsWith(str, prefix)

Python

>>> 'asdf'.startswith('as')
True

JavaScript

> "asdf".startsWith("as")
true

Go

strings.HasPrefix("string", "prefix")
strings.HasSuffix(s, "!")

Trim / Strip

C++

Strip prefix

absl::StripPrefix

Java

// since Java 11
stripLeading()
stripTrailing()

// Removes the white space from both ends
// Unicode-aware
// since Java 11
strip()

// Removes the white space from both ends
// only characters <= U+0020 (space)
trim()

Python

>>> ' asdf '.strip()
'asdf'

JavaScript

> " asdf ".trim()
"asdf"

Remove Trailing Slash

JavaScript

str.endsWith('/') ? str.slice(0, -1) : str;
str.endsWith('/') ? str.substr(0, str.length - 1) : str;

Remove Prefix

JavaScript

'www.example.com'.replace('www.', '');
'www.example.com'.replace(/^www\./, '');
'www.example.com'.slice(4);

Split

C++

use absl::StrSplit() from absl/strings/str_split.h

// Using std::string elements will make a copy of the pieces.
std::vector<std::string> letters = absl::StrSplit("a b c d e f",
                                                   absl::ByChar(' '));
// The string_views refer to memory from the input string.
std::list<absl::string_view> words = absl::StrSplit("the:quick;brown,fox",
                                                    absl::ByAnyChar(":;,"));

Go

import "strings"

result := strings.Split(str1, ",")

JavaScript

E.g. split by whitespaces.

str.split(/\s+/);

Python

>>> "a b c".split()
['a', 'b', 'c']

Repeated Characters

Python

>>> 'a' * 10
'aaaaaaaaaa'

Java

jshell> String s = IntStream.range(0, 10).mapToObj(i -> "a").collect(Collectors.joining(""))
s ==> "aaaaaaaaaa"

Join

C++

#include "third_party/absl/strings/str_join.h"
absl::StrJoin(std::make_tuple(a, b, c), "|");

Java

String.join(",", list);

Go

strings.Join(arr, ",")

Concatenate Strings

Kotlin

Suppose a and b are strings:

  • Use String interpolation: val s = "$a $b"
  • Use + or plus(): val s = a + b or val s = a.plus(b)
  • Use StringBuilder: val s = StringBuilder(); s.append(a).append(b); s.toString()

Translation

Python

maketrans(): creates a one to one mapping of a character to its translation / replacement.

str.maketrans()
bytes.maketrans()
bytearray.maketrans(from, to)

String Format

Python

>>> "hello {}".format("world")
'hello world'
>>> "{} {}".format("hello", "world")
'hello world'