Minimum cost to convert string into palindrome
Last Updated :
22 Jul, 2022
Convert string S into a palindrome string. You can only replace a character with any other character. When you replace character 'a' with any other character, it costs 1 unit, similarly for 'b' it is 2 units ..... and for 'z', it is 26 units. Find the minimum cost required to convert string S into palindrome string.
Examples :
Input : abcdef
Output : 6
Explanation: replace 'a', 'b' and
'c' => cost= 1 + 2 + 3 = 6
Input : aba
Output : 0
The idea is to start comparing from the two ends of string. Let i be initialized as 0 index and j initialized as length - 1. If characters at two indices are not same, a cost will apply. To make the cost minimum replace the character which is smaller. Then increment i by 1 and decrement j by 1. Iterate till i less than j.
Implementation:
C++
// CPP program to find minimum cost to make
// a palindrome.
#include <bits/stdc++.h>
using namespace std;
// Function to return cost
int cost(string str)
{
// length of string
int len = str.length();
// Iterate from both sides of string.
// If not equal, a cost will be there
int res = 0;
for (int i=0, j=len-1; i < j; i++, j--)
if (str[i] != str[j])
res += min(str[i], str[j]) - 'a' + 1;
return res;
}
// Driver code
int main()
{
string str = "abcdef";
cout << cost(str) << endl;
return 0;
}
Java
// Java program to find minimum cost to make
// a palindrome.
import java.io.*;
class GFG
{
// Function to return cost
static int cost(String str)
{
// length of string
int len = str.length();
// Iterate from both sides of string.
// If not equal, a cost will be there
int res = 0;
for (int i = 0, j = len - 1; i < j; i++, j--)
if (str.charAt(i) != str.charAt(j))
res += Math.min(str.charAt(i), str.charAt(j))
- 'a' + 1;
return res;
}
// Driver code
public static void main (String[] args)
{
String str = "abcdef";
System.out.println(cost(str));
}
}
// This code is contributed by vt_m.
Python3
# python program to find minimum
# cost to make a palindrome.
# Function to return cost
def cost(st):
# length of string
l = len(st)
# Iterate from both sides
# of string. If not equal,
# a cost will be there
res = 0
j = l - 1
i = 0
while(i < j):
if (st[i] != st[j]):
res += (min(ord(st[i]),
ord(st[j])) -
ord('a') + 1)
i = i + 1
j = j - 1
return res
# Driver code
st = "abcdef";
print(cost(st))
# This code is contributed by
# Sam007
C#
// C# program to find minimum cost
// to make a palindrome.
using System;
class GFG
{
// Function to return cost
static int cost(String str)
{
// length of string
int len = str.Length;
// Iterate from both sides of string.
// If not equal, a cost will be there
int res = 0;
for (int i = 0, j = len - 1; i < j; i++, j--)
if (str[i] != str[j])
res += Math.Min(str[i], str[j])
- 'a' + 1;
return res;
}
// Driver code
public static void Main ()
{
string str = "abcdef";
Console.WriteLine(cost(str));
}
}
// This code is contributed by vt_m.
PHP
<?php
// PHP program to find minimum
// cost to make a palindrome.
// Function to return cost
function cost($str)
{
// length of string
$len = strlen($str);
// Iterate from both sides
// of string. If not equal,
// a cost will be there
$res = 0;
for ($i = 0, $j = $len - 1;
$i < $j; $i++, $j--)
if ($str[$i] != $str[$j])
$res += (min(ord($str[$i]),
ord($str[$j])) -
ord('a') + 1 );
return $res;
}
// Driver code
$str = "abcdef";
echo cost($str);
// This code is contributed by Sam007
?>
JavaScript
<script>
// Javascript program to find minimum cost
// to make a palindrome.
// Function to return cost
function cost(str)
{
// length of string
let len = str.length;
// Iterate from both sides of string.
// If not equal, a cost will be there
let res = 0;
for (let i = 0, j = len - 1; i < j; i++, j--)
{
if (str[i] != str[j])
{
res += Math.min(str[i].charCodeAt(), str[j].charCodeAt()) - 'a'.charCodeAt() + 1;
}
}
return res;
}
let str = "abcdef";
document.write(cost(str));
</script>
Time Complexity : O(|S|) , where |S| is size of given string.
Space Complexity : O(1) , as we are not using any extra space.