Given an even integer N, the task is to construct a string such that the total number of distinct substrings of that string which are not a palindrome equals N2.

Examples:

Input:_ N = 2 _

Output:_ aabb _

Explanation:

_All the distinct non palindromic substrings are ab, abb, aab and aabb. _

_Therefore, the count of non-palindromic substrings is 4 = 2 2 _

Input:_ N = 4 _

Output:_ cccczzzz _

Explanation:

_All distinct non-palindromic substrings of the string are cz, czz, czzz, czzzz, ccz, cczz, cczzz, cczzzz, cccz, ccczz, ccczzz, ccczzzz, ccccz, cccczz, cccczzz, cccczzzz. _

_The count of non-palindromic substrings is 16. _

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

Approach:

It can be observed that, if the first N characters of a string are same, followed by N identical characters different than the first N characters, then the count of distinct non-palindromic substrings will be N2.

Proof:

_N = 3 _

_str = “aaabbb” _

_The string can be split into two substrings of N characters each: “aaa” and “bbb” _

_The first character ‘a’ from the first substring forms N distinct non-palindromic substrings “ab”, “abb”, “abbb” with the second substring. _

_Similiarly first two characters “aa” forms N distinct non-palindromic substrings “aab”, “aabb”, “aabbb”. _

_Similarly, remaining N – 2 characters of the first substring each form __N __distinct non-palindromic substrings as well. _

_Therefore, the total number of distinct non-palindromic substrings is equal to N2. _

Therefore, to solve the problem, print ‘a’ as the first N characters of the string and ‘b’ as the next N characters of the string.

Below is the implementation of the above approach:

C++

// C++ Program to implement

// the above approach

#include <bits/stdc++.h>

**using** **namespace** std;

// Function to construct a string

// having N*N non-palindromic substrings

**void** createString(``**int** N)

{

**for** (``**int** i = 0; i < N; i++) {

cout << 'a'``;

}

**for** (``**int** i = 0; i < N; i++) {

cout << 'b'``;

}

}

// Driver Code

**int** main()

{

**int** N = 4;

createString(N);

**return** 0;

}

Python3

## Python3 program to implement

## the above approach

## Function to construct a string

## having N*N non-palindromic substrings 

**def** createString(N):

**for** i **in** range``(N):

**print**``(``'a'``, end **=** '')

**for** i **in** range``(N):

print``(``'b'``, end **=** '')

## Driver Code

N **=** 4

createString(N)

## This code is contributed by Shivam Singh

Output:

aaaabbbb

Time Complexity:_ O(N)_

Auxiliary Space:_ O(1)_

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.

#greedy #mathematical #pattern searching #strings #palindrome #substring

Generate a String of having N*N distinct non-palindromic Substrings
1.30 GEEK