String

A string is actually an array of unicode characters.

String Comparison

String has its own compare function

Can we use "==" to compare two strings?

Depends on

Does the language support operator overloading?

Yes (like C++), we may use "==" to compare strings

No (like Java), we may not use "==" to compare two strings. "==" actually compares whether these two objects are the same object.

For Java, use

s1.equals(s2)

or

s1.compareTo(s2) == 0

Immutable or Mutable

In some languages (like C++), string is mutable, while in Java, string is immutable

Time Complexity of Built-in Operations

For instance, if the length of the string isN, the time complexity of both finding operation and substring operation isO(N).

// "static void main" must be defined in a public class.
public class Main {
    public static void main(String[] args) {
        String s1 = "Hello World";

        // 1. concatenate
        s1 += "!";
        System.out.println(s1);

        // 2. find
        System.out.println("The position of first 'o' is: " + s1.indexOf('o'));
        System.out.println("The position of last 'o' is: " + s1.lastIndexOf('o'));

        // 3. get substring
        System.out.println(s1.substring(6, 11));
    }
}

Beware of String Concatenation in Java

In Java, since the string is immutable, concatenation works by first allocating enough space for the new string, copy the contents from the old string and append to the new string.

In Java, using "+" for string concatenation, the time complexity will be O(n)

For the following, total time complexity in total will be O(n^2)

// "static void main" must be defined in a public class.
public class Main {
    public static void main(String[] args) {
        String s = "";
        int n = 10000;
        for (int i = 0; i < n; i++) {
            s += "hello";
        }
    }
}

Mutate String in Java

1. convert it to a char array

// "static void main" must be defined in a public class.
public class Main {
    public static void main(String[] args) {
        String s = "Hello World";
        char[] str = s.toCharArray();
        str[5] = ',';
        System.out.println(str);
    }
}

2. use some other data structures like StringBuilder

The below code runs in O(n) time complexity.

// "static void main" must be defined in a public class.
public class Main {
    public static void main(String[] args) {
        int n = 10000;
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < n; i++) {
            str.append("hello");
        }
        String s = str.toString();
    }
}

Last updated