JavaScript Program to Print all Substrings of a Given String

In this article, we will see how we can print all substrings of a given string in JavaScript language. We have provided an input string, from which we need to print all the possible substrings. Below we have stated the example for a better understanding of the problem statement:

Example:

Input: abc
Output: a
ab
abc
b
bc
c

To print all substrings of a given string in JavaScript, we have three different approaches, which we have stated below:

So, we will see all of the above approaches with its implementation:

Table of Content

  • Using substring() Method
  • Using slice() Method
  • Using String Concatenation
  • Using Array or No Builtin Functions
  • Using Recursion

Using substring() Method

The substring() method in JavaScript is used to get the substrings from the input string. We have used the 2 nested loops to specify the starting and ending indices of each of the substring and then the substrings are printed using substring() method.

Syntax:

string.substring([start,end])

Example: In this example, we will be printing all substrings of a given string in JavaScript using substring() method.

Javascript
let str = "abcd";
let uniqueSub = new Set();

for (let i = 0; i < str.length; i++) {
    for (
        let j = i + 1;
        j <= str.length;
        j++
    ) {
        let substring = str.substring(
            i,
            j
        );
        if (!uniqueSub.has(substring)) {
            console.log(substring);
            uniqueSub.add(substring);
        }
    }
}

Output
a
ab
abc
abcd
b
bc
bcd
c
cd
d

Using slice() Method

The slice() method in JavaScript is also used to extract the substrings of the input string. Same as Apprach 1, we have used 2 nested loops to specify the starting and ending indices, and then we are printing the substrings using splice() method.

Syntax:

string.slice([start,end])

Example: In this example, we will be printing all substrings of a given string in JavaScript using sllice() method.

Javascript
let str = "abcd";
let uniqueSub = new Set();

for (let i = 0; i < str.length; i++) {
    for (
        let j = i + 1;
        j <= str.length;
        j++
    ) {
        let substring = str.slice(i, j);
        if (!uniqueSub.has(substring)) {
            console.log(substring);
            uniqueSub.add(substring);
        }
    }
}

Output
a
ab
abc
abcd
b
bc
bcd
c
cd
d

Using String Concatenation

Syntax:

sub +=str[j];

Example: In this example, we will be printing all substrings of a given string in JavaScript using String Concatenation.

Javascript
let str = "abcd";
let uniqueSub = new Set();
for (let i = 0; i < str.length; i++) {
    let substring = "";
    for (
        let j = i;
        j < str.length;
        j++
    ) {
        substring += str[j];
        uniqueSub.add(substring);
    }
}
uniqueSub.forEach((substring) => {
    console.log(substring);
});

Output
a
ab
abc
abcd
b
bc
bcd
c
cd
d

Using Array or No Builtin Functions

The array is used to store the substrings and also we are checking for the substrings by using loop and conditional statement rather than using any builtin method. This apporach is completely raw appraoach, as no builtin methods are used here.

Syntax:

let array = [];
for(loop_condtion) {
//statements
}
if(condition)
{
//statements
}

Example: In this example, we will be printing all substrings of a given string in JavaScript using Array or without using Builtin functions.

Javascript
function subStrings(str) {
    let substrings = [];
    for (
        let start = 0;
        start < str.length;
        start++
    ) {
        for (
            let end = start + 1;
            end <= str.length;
            end++
        ) {
            let sub = "";
            for (
                let i = start;
                i < end;
                i++
            ) {
                sub += str[i];
            }
            let uniqueSub = true;
            for (
                let j = 0;
                j < substrings.length;
                j++
            ) {
                if (
                    sub ===
                    substrings[j]
                ) {
                    uniqueSub = false;
                    break;
                }
            }
            if (uniqueSub) {
                substrings.push(sub);
                console.log(sub);
            }
        }
    }
}
subStrings("abcd");

Output
a
ab
abc
abcd
b
bc
bcd
c
cd
d

Using Recursion

In this approach, we can generate all the substrings of a given string using recursion. The idea is to start from each character of the string and recursively generate substrings starting from that character, then move to the next character, and repeat the process until we reach the end of the string.

Example:

JavaScript
function generateSubstrings(str, start, end) {
    // Base case: if start pointer exceeds the length of the string
    if (start >= str.length) {
        return;
    }
    
    // Recursive case: generate substrings starting from 'start' pointer
    for (let i = start; i < end; i++) {
        console.log(str.substring(start, i + 1));
    }
    
    // Move to the next character and recursively call the function
    generateSubstrings(str, start + 1, end);
}

function printAllSubstrings(inputStr) {
    for (let i = 0; i < inputStr.length; i++) {
        generateSubstrings(inputStr, i, inputStr.length);
    }
}

const testString = "abcd";
printAllSubstrings(testString);

Output
a
ab
abc
abcd
b
bc
bcd
c
cd
d
b
bc
bcd
c
cd
d
c
cd
d
d