Count the number of Special Strings of a given length N

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: 3
Explanation :
The number of special string so length 2 are 3 i.e. “ab”, “ba”, “bb”

Input: N = 3
Output: 5
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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

5

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.