All substrings of a given String (original) (raw)

Last Updated : 14 Feb, 2025

Given a string s, containing lowercase alphabetical characters. The task is to print all non-empty substrings of the given string.

**Examples :

**Input : s = "abc"
**Output : "a", "ab", "abc", "b", "bc", "c"

**Input : s = "ab"
**Output : "a", "ab", "b"

**Input : s = "a"
**Output : "a"

[Expected Approach] - Using Iteration

// C++ program to find all the // substrings of given string #include <bits/stdc++.h> using namespace std;

// Function to find all substrings vector findSubstrings(string &s) {

// to store all substrings
vector<string> res;

for(int i = 0; i < s.length(); i++) {
    for(int j = i; j < s.length(); j++) {
        
        // substr function takes starting index
        // and length as parameters
        res.push_back(s.substr(i, j-i+1));
    }
}

return res;

}

int main() { string s = "abc"; vector res = findSubstrings(s); for(auto i:res) { cout<< i <<" "; } return 0; }

C

#include <stdio.h> #include <string.h>

// Function to find all substrings void findSubstrings(char *s) {

// to store all substrings
int len = strlen(s);
for (int i = 0; i < len; i++) {
    for (int j = i; j < len; j++) {
        for (int k = i; k <= j; k++) {
            putchar(s[k]);
        }
        printf(" ");
    }
}

}

int main() { char s[] = "abc"; findSubstrings(s); return 0; }

Java

// Function to find all substrings import java.util.ArrayList; import java.util.List;

public class Main { public static List findSubstrings(String s) {

    // to store all substrings
    List<String> res = new ArrayList<>();
    for (int i = 0; i < s.length(); i++) {
        for (int j = i; j < s.length(); j++) {
            
            // substr function takes starting index
            // and ending index + 1 as parameters
            res.add(s.substring(i, j + 1));
        }
    }
    return res;
}

public static void main(String[] args) {
    String s = "abc";
    List<String> res = findSubstrings(s);
    for (String i : res) {
        System.out.print(i + " ");
    }
}

}

Python

Function to find all substrings

def find_substrings(s):

# to store all substrings
res = []
for i in range(len(s)):
    for j in range(i, len(s)):
        res.append(s[i:j+1])
return res

s = 'abc' res = find_substrings(s) for i in res: print(i, end=' ')

C#

// Function to find all substrings using System; using System.Collections.Generic;

class Program { public static List FindSubstrings(string s) {

    List<string> res = new List<string>();
    
    for (int i = 0; i < s.Length; i++) {
        for (int j = i; j < s.Length; j++) {
            
            // substr function takes starting index
            // and length as parameters
            res.Add(s.Substring(i, j - i + 1));
        }
    }
    return res;
}

static void Main() {
    string s = "abc";
    List<string> res = FindSubstrings(s);
    foreach (var i in res) {
        Console.Write(i + " ");
    }
}

}

JavaScript

// Function to find all substrings function findSubstrings(s) {

// to store all substrings
let res = [];
for (let i = 0; i < s.length; i++) {
    for (let j = i; j < s.length; j++) {
        
        // substr function takes starting index
        // and ending index + 1 as parameters
        res.push(s.substring(i, j + 1));
    }
}
return res;

}

let s = 'abc'; let res = findSubstrings(s); res.forEach(i => { process.stdout.write(i + ' '); });

`

[Interesting Approach] - Using Recursion

The idea is to recursively generate all possible substrings of the given string s. To do so, create an array of string **res[] to store the substrings of string **s and an empty string **cur to store the current string. Start from the **0th index and for each index ind, add the current character s[ind] in the string cur, and addthe string cur in res[]. Then, move to index ind + 1, and recursively generate the all substrings. At each recursive call, check if string cur is empty, if so, skip the current character to start the string from next index ind + 1. At last print all the substrings.

C++ `

// C++ program to find all the // substrings of given string #include <bits/stdc++.h> using namespace std;

// Recursive Function to find all // substrings of a string void subString(string &s, int n, int index, string &cur, vector &res) {

// if we have reached the 
// end of the string
if (index == n) {
    return;
}

// add the character s[index] 
// to the current string
cur.push_back(s[index]);

// add the current string in result
res.push_back(cur);

// move to next index
subString(s, n, index + 1, cur, res);

// remove the current character
// from the current string 
cur.pop_back();


// if current string is empty
// skip the current index to
// start the new substring
if(cur.empty()) {
    subString(s, n, index + 1, cur, res);
}

}

// Function to find all substrings vector findSubstrings(string s) {

// to store all substrings
vector<string> res;

// to store current string
string cur = "";
subString(s, s.length(), 0, cur, res);
return res;

}

int main() { string s = "abc"; vector res = findSubstrings(s); for(auto i:res) { cout<< i <<" "; } return 0; }

Java

// Java program to find all the // substrings of given string import java.util.*;

class GFG {

// Recursive Function to find all
// substrings of a string
static void subString(String s, int n, int index,
                      StringBuilder cur, List<String> res) {

    // if we have reached the
    // end of the string
    if (index == n) {
        return;
    }

    // add the character s.charAt(index)
    // to the current string
    cur.append(s.charAt(index));

    // add the current string in result
    res.add(cur.toString());

    // move to next index
    subString(s, n, index + 1, cur, res);

    // remove the current character
    // from the current string
    cur.deleteCharAt(cur.length() - 1);

    // if current string is empty
    // skip the current index to
    // start the new substring
    if (cur.length() == 0) {
        subString(s, n, index + 1, cur, res);
    }
}

// Function to find all substrings
static List<String> findSubstrings(String s) {

    // to store all substrings
    List<String> res = new ArrayList<>();

    // to store current string
    StringBuilder cur = new StringBuilder();
    subString(s, s.length(), 0, cur, res);
    return res;
}

public static void main(String[] args) {
    String s = "abc";
    List<String> res = findSubstrings(s);
    for (String str : res) {
        System.out.print(str + " ");
    }
}

}

Python

Python program to find all the

substrings of given string

Recursive Function to find all

substrings of a string

def subString(s, n, index, cur, res):

# if we have reached the
# end of the string
if index == n:
    return

# add the character s[index]
# to the current string
cur += s[index]

# add the current string in result
res.append(cur)

# move to next index
subString(s, n, index + 1, cur, res)

# remove the current character
# from the current string
cur = cur[:-1]

# if current string is empty
# skip the current index to
# start the new substring
if not cur:
    subString(s, n, index + 1, cur, res)

Function to find all substrings

def findSubstrings(s):

# to store all substrings
res = []

# to store current string
cur = ""
subString(s, len(s), 0, cur, res)
return res

if name == "main": s = "abc" res = findSubstrings(s) print(" ".join(res))

C#

// C# program to find all the // substrings of given string using System; using System.Collections.Generic;

class GFG {

// Recursive Function to find all
// substrings of a string
static void subString(string s, int n, int index,
                      List<char> cur, List<string> res) {

    // if we have reached the
    // end of the string
    if (index == n) {
        return;
    }

    // add the character s[index]
    // to the current string
    cur.Add(s[index]);

    // add the current string in result
    res.Add(new string(cur.ToArray()));

    // move to next index
    subString(s, n, index + 1, cur, res);

    // remove the current character
    // from the current string
    cur.RemoveAt(cur.Count - 1);

    // if current string is empty
    // skip the current index to
    // start the new substring
    if (cur.Count == 0) {
        subString(s, n, index + 1, cur, res);
    }
}

// Function to find all substrings
static List<string> findSubstrings(string s) {

    // to store all substrings
    List<string> res = new List<string>();

    // to store current string
    List<char> cur = new List<char>();
    subString(s, s.Length, 0, cur, res);
    return res;
}

public static void Main() {
    string s = "abc";
    List<string> res = findSubstrings(s);
    Console.WriteLine(string.Join(" ", res));
}

}

JavaScript

// JavaScript program to find all the // substrings of given string

// Recursive Function to find all // substrings of a string function subString(s, n, index, cur, res) {

// if we have reached the
// end of the string
if (index === n) {
    return;
}

// add the character s[index]
// to the current string
cur += s[index];

// add the current string in result
res.push(cur);

// move to next index
subString(s, n, index + 1, cur, res);

// remove the current character
// from the current string
cur = cur.slice(0, -1);

// if current string is empty
// skip the current index to
// start the new substring
if (cur.length === 0) {
    subString(s, n, index + 1, cur, res);
}

}

// Function to find all substrings function findSubstrings(s) {

// to store all substrings
let res = [];

// to store current string
let cur = "";
subString(s, s.length, 0, cur, res);
return res;

}

const s = "abc"; const res = findSubstrings(s); console.log(res.join(" "));

`