Count of non-palindromic strings of length M using given N characters

Given two positive integers N and M, the task is to calculate the number of non-palindromic strings of length M using given N distinct characters. 
Note: Each distinct characters can be used more than once.

Examples: 

Input: N = 3, M = 2 
Output:
Explanation: 
Since only 3 characters are given, those 3 characters can be used to form 32 different strings. Out of these, only 3 strings are palindromic. Hence, the remaining 6 strings are palindromic.

Input: N = 26, M = 5 
Output: 11863800 
 

Approach: 
Follow the steps below to solve the problem:



  • Total number of strings of length M using given N characters will be NM.
  • For a string to be a palindrome, the first half and second half should be equal. For even values of M, we need to select only M/2 characters from the given N characters. For odd values, we need to select M/2 + 1 characters from the given N characters. Since repetitions are allowed, the total number of palindromic strings of length M will be N(M/2 + M%2).
  • The required count of non-palindromic strings is given by the following equation:
    NM - N(M/2 + M%2)
    

Below is the implementation of the above approach: 

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program to count
// non-palindromic strings
// of length M using N 
// distinct characters
#include <bits/stdc++.h>
using namespace std;
  
  
// Iterative Function to calculate
// base^pow in O(log y)
unsigned long long power(
    unsigned long long base,
    unsigned long long pow)
{
    unsigned long long res = 1;
    while (pow > 0) {
        if (pow & 1)
            res = (res * base);
        base = (base * base);
        pow >>= 1;
    }
    return res;
}
  
// Function to return the 
// count of non palindromic strings
unsigned long long countNonPalindromicString(
    unsigned long long n,
    unsigned long long m)
{
    // Count of strings using n
    // characters with 
    // repetitions allowed
    unsigned long long total
        = power(n, m);
      
    // Count of palindromic strings
    unsigned long long palindrome
        = power(n, m / 2 + m % 2);
      
    // Count of non-palindromic strings
    unsigned long long count
        = total - palindrome;
  
    return  count;
}
int main()
{
  
    int n = 3, m = 5;
    cout<< countNonPalindromicString(n, m);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count non-palindromic
// strings of length M using N distinct
// characters 
import java.util.*;
  
class GFG{
  
// Iterative Function to calculate
// base^pow in O(log y)
static long power(long base, long pow)
{
    long res = 1;
    while (pow > 0)
    {
        if ((pow & 1) == 1)
            res = (res * base);
        base = (base * base);
        pow >>= 1;
    }
    return res;
}
  
// Function to return the 
// count of non palindromic strings
static long countNonPalindromicString(long n, 
                                      long m)
{
      
    // Count of strings using n
    // characters with 
    // repetitions allowed
    long total = power(n, m);
      
    // Count of palindromic strings
    long palindrome = power(n, m / 2 + m % 2);
      
    // Count of non-palindromic strings
    long count = total - palindrome;
  
    return count;
  
// Driver code
public static void main(String[] args)
{
    int n = 3, m = 5;
      
    System.out.println(
        countNonPalindromicString(n, m));
}
}
  
// This code is contributed by offbeat

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to count non-palindromic strings
# of length M using N distinct characters 
  
# Iterative Function to calculate
# base^pow in O(log y)
def power(base, pwr):
  
    res = 1
    while(pwr > 0):
        if(pwr & 1):
            res = res * base
        base = base * base
        pwr >>= 1
  
    return res
  
# Function to return the count 
# of non palindromic strings
def countNonPalindromicString(n, m):
  
    # Count of strings using n
    # characters with
    # repetitions allowed
    total = power(n, m)
  
    # Count of palindromic strings
    palindrome = power(n, m // 2 + m % 2)
  
    # Count of non-palindromic strings
    count = total - palindrome
  
    return count
  
# Driver code
if __name__ == '__main__':
  
    n = 3
    m = 5
      
    print(countNonPalindromicString(n, m))
  
# This code is contributed by Shivam Singh

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count non-palindromic
// strings of length M using N distinct
// characters 
using System;
  
class GFG{
  
// Iterative Function to calculate
// base^pow in O(log y)
static long power(long Base, long pow)
{
    long res = 1;
    while (pow > 0)
    {
        if ((pow & 1) == 1)
            res = (res * Base);
              
        Base = (Base * Base);
        pow >>= 1;
    }
    return res;
}
  
// Function to return the 
// count of non palindromic strings
static long countNonPalindromicString(long n, 
                                      long m)
{
      
    // Count of strings using n
    // characters with 
    // repetitions allowed
    long total = power(n, m);
      
    // Count of palindromic strings
    long palindrome = power(n, m / 2 + m % 2);
      
    // Count of non-palindromic strings
    long count = total - palindrome;
  
    return count;
  
// Driver code
public static void Main(String[] args)
{
    int n = 3, m = 5;
      
    Console.WriteLine(
        countNonPalindromicString(n, m));
}
}
  
// This code is contributed by PrinciRaj1992 

chevron_right


Output: 

216

Time Complexity: O(log(N))

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.




My Personal Notes arrow_drop_up

Recommended Posts:


Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.