Skip to content
Related Articles

Related Articles

Improve Article

Subsequences generated by including characters or ASCII value of characters of given string

  • Difficulty Level : Medium
  • Last Updated : 09 Jul, 2021

Given a string str of length N, the task is to print all possible non-empty subsequences of the given string such that the subsequences either contains characters or ASCII value of the characters from the given string.

Examples: 

Input: str = “ab” 
Output: b 98 a ab a98 97 97b 9798 
Explanation: 
Possible subsequence of the strings are { b, a, ab }. 
Possible subsequences of the string generated by including either the characters or the ASCII value of the characters from the given string are { 98, b, a, 97, ab, 97b, a98, 9798 }. 
Therefore, the required output is { b, 98, a, ab, a98, 97, 97b, 9798 }.

Input: str = “a” 
Output: a 97

Approach: Follow the steps below to solve the problem: 



FindSub(str, res, i) = { FindSub(str, res, i + 1), FindSub(str, res + str[i], i + 1), FindSub(str, res + ASCII(str[i]), i + 1) } 
res = subsequence of the string 
i = index of a character in str 
 

  • Using the above recurrence relation, print all possible subsequences based on the given conditions.

Below is the implementation of the above approach: 

C++




// C++ program to implement
// the above approach
#include<bits/stdc++.h>
using namespace std;
 
// Function to print subsequences containing
// ASCII value of the characters or the
// the characters of the given string
void FindSub(string str, string res,
             int i)
{
     
    // Base Case
    if (i == str.length())
    {
         
        // If length of the
        // subsequence exceeds 0
        if (res.length() > 0)
        {
             
            // Print the subsequence
           cout << res << " ";
        }
        return;
    }
 
    // Stores character present at
    // i-th index of str
    char ch = str[i];
 
    // If the i-th character is not
    // included in the subsequence
    FindSub(str, res, i + 1);
 
    // Including the i-th character
    // in the subsequence
    FindSub(str, res + ch, i + 1);
 
    // Include the ASCII value of the
    // ith character in the subsequence
    FindSub(str, res + to_string(int(ch)), i + 1);
}
 
// Driver Code
int main()
{
    string str = "ab";
    string res = "";
     
    // Stores length of str
    int N = str.length();
 
    FindSub(str, res, 0);
}
 
// This code is contributed by ipg2016107

Java




// Java program to implement
// the above approach
class GFG {
 
    // Function to print subsequences containing
    // ASCII value of the characters or the
    // the characters of the given string
    static void FindSub(String str, String res,
                        int i)
    {
        // Base Case
        if (i == str.length()) {
 
            // If length of the
            // subsequence exceeds 0
            if (res.length() > 0) {
 
                // Print the subsequence
                System.out.print(res + " ");
            }
            return;
        }
 
        // Stores character present at
        // i-th index of str
        char ch = str.charAt(i);
 
        // If the i-th character is not
        // included in the subsequence
        FindSub(str, res, i + 1);
 
        // Including the i-th character
        // in the subsequence
        FindSub(str, res + ch, i + 1);
 
        // Include the ASCII value of the
        // ith character in the subsequence
        FindSub(str, res + (int)ch, i + 1);
        ;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
 
        String str = "ab";
 
        String res = "";
 
        // Stores length of str
        int N = str.length();
 
        FindSub(str, res, 0);
    }
}

Python3




# Python3 program to implement
# the above approach
 
# Function to print subsequences containing
# ASCII value of the characters or the
# the characters of the given string
def FindSub(string , res, i) :
     
    # Base Case
    if (i == len(string)):
 
        # If length of the
        # subsequence exceeds 0
        if (len(res) > 0) :
             
            # Print the subsequence
            print(res, end=" ");
        
        return;
 
    # Stores character present at
    # i-th index of str
    ch = string[i];
 
    # If the i-th character is not
    # included in the subsequence
    FindSub(string, res, i + 1);
 
    # Including the i-th character
    # in the subsequence
    FindSub(string, res + ch, i + 1);
 
    # Include the ASCII value of the
    # ith character in the subsequence
    FindSub(string, res + str(ord(ch)), i + 1);
 
# Driver Code
if __name__ == "__main__" :
     
    string = "ab";
 
    res = "";
 
    # Stores length of str
    N = len(string);
 
    FindSub(string, res, 0);
   
# This code is contributed by AnkitRai01

C#




// C# program to implement
// the above approach
using System;
 
class GFG{
 
// Function to print subsequences containing
// ASCII value of the characters or the
// the characters of the given string
static void FindSub(string str, string res,
                    int i)
{
     
    // Base Case
    if (i == str.Length)
    {
         
        // If length of the
        // subsequence exceeds 0
        if (res.Length > 0)
        {
             
            // Print the subsequence
            Console.Write(res + " ");
        }
        return;
    }
 
    // Stores character present at
    // i-th index of str
    char ch = str[i];
 
    // If the i-th character is not
    // included in the subsequence
    FindSub(str, res, i + 1);
 
    // Including the i-th character
    // in the subsequence
    FindSub(str, res + ch, i + 1);
 
    // Include the ASCII value of the
    // ith character in the subsequence
    FindSub(str, res + (int)ch, i + 1);
}
 
// Driver Code
public static void Main(String[] args)
{
    string str = "ab";
    string res = "";
 
    // Stores length of str
    int N = str.Length;
 
    FindSub(str, res, 0);
}
}
 
// This code is contributed by AnkitRai01

Javascript




<script>
 
// JavaScript program to implement
// the above approach
 
// Function to print subsequences containing
// ASCII value of the characters or the
// the characters of the given string
function FindSub(str, res, i)
{
     
    // Base Case
    if (i === str.length)
    {
 
        // If length of the
        // subsequence exceeds 0
        if (res.length > 0)
        {
             
            // Print the subsequence
            document.write(res + " ");
        }
        return;
    }
 
    // Stores character present at
    // i-th index of str
    var ch = str[i];
     
    // If the i-th character is not
    // included in the subsequence
    FindSub(str, res, i + 1);
     
    // Including the i-th character
    // in the subsequence
    FindSub(str, res + ch, i + 1);
     
    // Include the ASCII value of the
    // ith character in the subsequence
    FindSub(str, res + ch.charCodeAt(0), i + 1);
}
 
// Driver Code
var str = "ab";
var res = "";
 
// Stores length of str
var N = str.length;
 
FindSub(str, res, 0);
 
// This code is contributed by rdtank
 
</script>
Output: 
b 98 a ab a98 97 97b 9798

 

Time Complexity: O(3N) 
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :