# Number of strings of length N with no palindromic sub string

• Difficulty Level : Medium
• Last Updated : 04 Aug, 2022

Given two positive integers N, M. The task is to find the number of strings of length N under the alphabet set of size M such that no substrings of size greater than 1 is palindromic.

Examples:

Input : N = 2, M = 3
Output : 6
In this case, set of alphabet are 3, say {A, B, C}
All possible string of length 2, using 3 letters are:
{AA, AB, AC, BA, BB, BC, CA, CB, CC}
Out of these {AA, BB, CC} contain palindromic substring,
8 - 2 = 6.

Input : N = 2, M = 2
Output : 2
Out of {AA, BB, AB, BA}, only {AB, BA} contain
non-palindromic substrings.

First, observe, a string does not contain any palindromic substring if the string doesn’t have any palindromic substring of the length 2 and 3, because all the palindromic string of the greater lengths contains at least one palindromic substring of the length of 2 or 3, basically in the center.

So, the following is true:

• There are M ways to choose the first symbol of the string.
• Then there are (M – 1) ways to choose the second symbol of the string. Basically, it should not be equal to first one.
• Then there are (M – 2) ways to choose any next symbol. Basically, it should not coincide with the previous symbols, that aren’t equal.

Knowing this, we can evaluate the answer in the following ways:

• If N = 1, then the answer will be M.
• If N = 2, then the answer is M*(M – 1).
• If N >= 3, then M * (M – 1) * (M – 2)N-2.

Below is the implementation of above idea :

## C++

 // CPP program to count number of strings of// size m such that no substring is palindrome.#include using namespace std; // Return the count of strings with// no palindromic substring.int numofstring(int n, int m){       if (n == 1)        return m;     if (n == 2)        return m * (m - 1);     return m * (m - 1) * pow(m - 2, n - 2);} // Driven Programint main(){       int n = 2, m = 3;    cout << numofstring(n, m) << endl;    return 0;}

## Java

 // Java program to count number of strings of// size m such that no substring is palindrome.import java.io.*; class GFG {         // Return the count of strings with    // no palindromic substring.    static int numofstring(int n, int m)    {        if (n == 1)            return m;             if (n == 2)            return m * (m - 1);             return m * (m - 1) * (int)Math.pow(m - 2, n - 2);    }         // Driven Program    public static void main (String[] args)    {        int n = 2, m = 3;        System.out.println(numofstring(n, m));    }} // This code is contributed by ajit.

## Python3

 # Python3 program to count number of strings of# size m such that no substring is palindrome # Return the count of strings with# no palindromic substring.def numofstring(n, m):    if n == 1:        return m     if n == 2:        return m * (m - 1)     return m * (m - 1) * pow(m - 2, n - 2) # Driven Programn = 2m = 3print (numofstring(n, m)) # This code is contributed# by Shreyanshi Arun.

## C#

 // C# program to count number of strings of// size m such that no substring is palindrome.using System; class GFG {         // Return the count of strings with    // no palindromic substring.    static int numofstring(int n, int m)    {        if (n == 1)            return m;             if (n == 2)            return m * (m - 1);             return m * (m - 1) * (int)Math.Pow(m - 2,                                           n - 2);    }         // Driver Code    public static void Main ()    {        int n = 2, m = 3;        Console.Write(numofstring(n, m));    }} // This code is contributed by Nitin Mittal.



## Javascript



Output

6

My Personal Notes arrow_drop_up