Skip to content
Related Articles

Related Articles

Improve Article
Count the number of Special Strings of a given length N
  • Difficulty Level : Medium
  • Last Updated : 28 Apr, 2021

Given the length N of the string, we have to find the number of special strings of length N. 
A string is called a special string if it consists only of lowercase letters a and b and there is at least one b between two a’s in the string. Since the number of strings may be very large, therefore print it modulo 10^9+7. 
Examples: 
 

Input: N = 2 
Output:
Explanation : 
The number of special string so length 2 are 3 i.e. “ab”, “ba”, “bb”
Input: N = 3 
Output:
Explanation: 
The number of special string so length 3 are 5 i.e. “abb”, “aba”, “bab”, “bba”, “bbb” 
 

 

Approach:
To solve the problem mentioned above, the first observation is if the integer N is 0 then there can only be an empty string as the answer, if N is 1 then there can be two string “a” or “b” as an answer but if the value of N is greater than 1 then the answer is equal to the sum of previous two terms. Now to find the count of special strings we run a loop and for each integer i count of the special string of length i is equal to the sum of the count of special strings of length i-1 and count of special strings of length i-2. Store the value of each integer in an array and return the required answer.
Below is the implementation of the above approach: 
 

C++




// C++ Program to Count the number
// of Special Strings of a given length N
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
 
// Function to return count of special strings
long count_special(long n)
{
    // stores the answer for a
    // particular value of n
    long fib[n + 1];
 
    // for n = 0 we have empty string
    fib[0] = 1;
 
    // for n = 1 we have
    // 2 special strings
    fib[1] = 2;
 
    for (int i = 2; i <= n; i++) {
 
        // calculate count of special string of length i
        fib[i] = (fib[i - 1] % mod + fib[i - 2] % mod) % mod;
    }
 
    // fib[n] stores the count
    // of special strings of length n
    return fib[n];
}
 
// Driver code
int main()
{
 
    // initialise n
    long n = 3;
 
    cout << count_special(n) << endl;
 
    return 0;
}

Java




// Java program to count the number of
// special strings of a given length N
import java.util.*;
 
class GFG{
     
static final int mod = 1000000007;
 
// Function to return count of
// special Strings
static int count_special(int n)
{
     
    // Stores the answer for a
    // particular value of n
    int []fib = new int[n + 1];
 
    // For n = 0 we have empty String
    fib[0] = 1;
 
    // For n = 1 we have
    // 2 special Strings
    fib[1] = 2;
 
    for(int i = 2; i <= n; i++)
    {
        
       // Calculate count of special
       // String of length i
       fib[i] = (fib[i - 1] % mod +
                 fib[i - 2] % mod) % mod;
    }
 
    // fib[n] stores the count of
    // special Strings of length n
    return fib[n];
}
 
// Driver code
public static void main(String[] args)
{
 
    // Initialise n
    int n = 3;
 
    System.out.print(count_special(n) + "\n");
}
}
 
// This code is contributed by sapnasingh4991

Python3




# Python3 program to count the number
# of special strings of a given length N
mod = 1000000007
 
# Function to return count of
# special strings
def count_special(n):
     
    # Stores the answer for a
    # particular value of n
    fib = [0 for i in range(n + 1)]
 
    # For n = 0 we have empty string
    fib[0] = 1
 
    # For n = 1 we have
    # 2 special strings
    fib[1] = 2
 
    for i in range(2, n + 1, 1):
         
        # Calculate count of special
        # string of length i
        fib[i] = (fib[i - 1] % mod +
                  fib[i - 2] % mod) % mod
 
    # fib[n] stores the count
    # of special strings of length n
    return fib[n]
 
# Driver code
if __name__ == '__main__':
     
    # Initialise n
    n = 3
 
    print(count_special(n))
 
# This code is contributed by Bhupendra_Singh

C#




// C# program to count the number of
// special strings of a given length N
using System;
class GFG{
     
const int mod = 1000000007;
 
// Function to return count of
// special Strings
static int count_special(int n)
{
     
    // Stores the answer for a
    // particular value of n
    int []fib = new int[n + 1];
 
    // For n = 0 we have empty String
    fib[0] = 1;
 
    // For n = 1 we have
    // 2 special Strings
    fib[1] = 2;
 
    for(int i = 2; i <= n; i++)
    {
         
        // Calculate count of special
        // String of length i
        fib[i] = (fib[i - 1] % mod +
                  fib[i - 2] % mod) % mod;
    }
 
    // fib[n] stores the count of
    // special Strings of length n
    return fib[n];
}
 
// Driver code
public static void Main()
{
 
    // Initialise n
    int n = 3;
 
    Console.Write(count_special(n) + "\n");
}
}
 
// This code is contributed by Nidhi_biet

Javascript




<script>
      // JavaScript Program to Count the number
      // of Special Strings of a given length N
 
      var mod = 1000000007;
 
      // Function to return count of special strings
      function count_special(n) {
        // stores the answer for a
        // particular value of n
        var fib = [...Array(n + 1)];
 
        // for n = 0 we have empty string
        fib[0] = 1;
 
        // for n = 1 we have
        // 2 special strings
        fib[1] = 2;
 
        for (var i = 2; i <= n; i++) {
          // calculate count of special string of length i
          fib[i] = ((fib[i - 1] % mod) + (fib[i - 2] % mod)) % mod;
        }
 
        // fib[n] stores the count
        // of special strings of length n
        return fib[n];
      }
 
      // Driver code
      // initialise n
      var n = 3;
      document.write(count_special(n) + "<br>");
    </script>
Output: 
5

 

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 industry experts, please refer Geeks Classes Live 




My Personal Notes arrow_drop_up
Recommended Articles
Page :