# Minimum reduce operations to convert a given string into a palindrome

Given a String find the minimum number of reduce operations required to convert a given string into a palindrome. In a reduce operation, we can change character to a immediate lower value. For example b can be converted to a.

Examples :

```Input  :  abcd
Output :  4
We need to reduce c once
and d three times.

Input  : ccc
Output : 0```

The idea is simple. We traverse string from left and compare characters of left half with their corresponding characters in right half. We add difference between to characters to result.

Implementation:

## C++

 `// CPP program to count minimum reduce``// operations to make a palindrome``#include ``using` `namespace` `std;` `// Returns count of minimum character``// reduce operations to make palindrome.``int` `countReduce(string& str)``{``    ``int` `n = str.length();``    ``int` `res = 0;` `    ``// Compare every character of first half``    ``// with the corresponding character of``    ``// second half and add difference to``    ``// result.``    ``for` `(``int` `i = 0; i < n / 2; i++)``        ``res += ``abs``(str[i] - str[n - i - 1]);` `    ``return` `res;``}` `// Driver code``int` `main()``{``    ``string str = ``"abcd"``;``    ``cout << countReduce(str);``    ``return` `0;``}`

## Java

 `// Java program to count minimum reduce``// operations to make a palindrome``import` `java.io.*;` `class` `GFG ``{``    ``// Returns count of minimum character``    ``// reduce operations to make palindrome.``    ``static` `int` `countReduce(String str)``    ``{``        ``int` `n = str.length();``        ``int` `res = ``0``;``    ` `        ``// Compare every character of first half``        ``// with the corresponding character of``        ``// second half and add difference to``        ``// result.``        ``for` `(``int` `i = ``0``; i < n / ``2``; i++)``            ``res += Math.abs(str.charAt(i) ``                   ``- str.charAt(n - i - ``1``));``    ` `        ``return` `res;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main (String[] args) ``    ``{``        ``String str = ``"abcd"``;``        ``System.out.println( countReduce(str));``            ` `    ``}``}` `// This code is contributed by vt_m.`

## Python3

 `# python3 program to count minimum reduce``# operations to make a palindrome` `# Returns count of minimum character``# reduce operations to make palindrome.``def` `countReduce(``str``):` `    ``n ``=` `len``(``str``)``    ``res ``=` `0` `    ``# Compare every character of first half``    ``# with the corresponding character of``    ``# second half and add difference to``    ``# result.``    ``for` `i ``in` `range``(``0``, ``int``(n``/``2``)):``        ``res ``+``=` `abs``( ``int``(``ord``(``str``[i])) ``-``               ``int``(``ord``(``str``[n ``-` `i ``-` `1``])) )``    ` `    ``return` `res` `# Driver code``str` `=` `"abcd"``print``(countReduce(``str``))` `# This code is contributed by Sam007`

## C#

 `// C# program to count minimum reduce``// operations to make a palindrome``using` `System;` `class` `GFG {``    ` `    ``// Returns count of minimum character``    ``// reduce operations to make palindrome.``    ``static` `int` `countReduce(``string` `str)``    ``{``        ``int` `n = str.Length;``        ``int` `res = 0;``    ` `        ``// Compare every character of first``        ``// half with the corresponding ``        ``// character of second half and ``        ``// add difference to result.``        ``for` `(``int` `i = 0; i < n / 2; i++)``            ``res += Math.Abs(str[i] ``                    ``- str[n - i - 1]);``    ` `        ``return` `res;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main () ``    ``{``        ``string` `str = ``"abcd"``;``        ``Console.WriteLine( countReduce(str));``            ` `    ``}``}` `// This code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

Output
`4`

Time Complexity: O(n) where n is the length of the string
Auxiliary Space: O(1)

Previous
Next