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

• Difficulty Level : Medium
• Last Updated : 07 Apr, 2021

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,
so our answer will be
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 Program``int` `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 Program``n ``=` `2``m ``=` `3``print` `(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.`

## PHP

 ``

## Javascript

 ``

Output

`6`

My Personal Notes arrow_drop_up