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++ 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 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