Open In App

Minimum cost to convert string into palindrome

Last Updated : 22 Jul, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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>

Output
6

Time Complexity : O(|S|) , where |S| is size of given string.
Space Complexity : O(1) , as we are not using any extra space.


Next Article
Article Tags :
Practice Tags :

Similar Reads