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.
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.
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.
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.
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:
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