Open In App

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

Last Updated : 11 May, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Given an even integer N, the task is to construct a string such that the total number of distinct substrings of that string that 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. 

Approach:
It can be observed that, if the first N characters of a string are the same, followed by N identical characters different from 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. 
Similarly, 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;
}


Java




// Java Program to implement
// the above approach
class GFG{
 
// Function to construct a string
// having N*N non-palindromic substrings
static void createString(int N)
{
    for (int i = 0; i < N; i++)
    {
        System.out.print('a');
    }
    for (int i = 0; i < N; i++)
    {
        System.out.print('b');
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int N = 4;
 
    createString(N);
}
}
 
// This code is contributed by shivanisinghss2110


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


C#




// C# program to implement
// the above approach
using System;
 
class GFG{
 
// Function to construct a string
// having N*N non-palindromic substrings
static void createString(int N)
{
    for(int i = 0; i < N; i++)
    {
        Console.Write('a');
    }
    for(int i = 0; i < N; i++)
    {
        Console.Write('b');
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    int N = 4;
 
    createString(N);
}
}
 
// This code is contributed by Princi Singh


Javascript




<script>
// JavaScript program for the above approach
 
// Function to construct a string
// having N*N non-palindromic substrings
function createString(N)
{
    for (let i = 0; i < N; i++)
    {
        document.write('a');
    }
    for (let i = 0; i < N; i++)
    {
        document.write('b');
    }
}
     
// Driver Code
 
        let N = 4;
   
    createString(N);
         
</script>


Output: 

aaaabbbb

 

Time Complexity: O(N)
Auxiliary Space: O(1)
 

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads