# 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”

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ` `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 = 1; ` ` `  `    ``// for n = 1 we have ` `    ``// 2 special strings ` `    ``fib = 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 = 1; ` ` `  `    ``// For n = 1 we have ` `    ``// 2 special Strings ` `    ``fib = 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 `

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.