# Minimum number of deletions to make a string palindrome

Given a string of size ‘n’. The task is to remove or delete minimum number of characters from the string so that the resultant string is palindrome.

Note: The order of characters should be maintained.

Examples:

```Input : aebcbda
Output : 2
Remove characters 'e' and 'd'
Resultant string will be 'abcba'
which is a palindromic string

Input : geeksforgeeks
Output : 8
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

A simple solution is to remove all subsequences one by one and check if remaining string is palindrome or not. Time complexity of this solution is exponential.

An efficient approach uses the concept of finding the length of the longest palindromic subsequence of a given sequence.

Algorithm:

```-->str is the given string.
-->n length of str
-->len be the length of the longest
palindromic subsequence of str
-->// minimum number of deletions
min = n - len
```

## C++

```// C++ implementation to find minimum number
// of deletions to make a string palindromic
#include <bits/stdc++.h>
using namespace std;

// Returns the length of the longest
// palindromic subsequence in 'str'
int lps(string str)
{
int n = str.size();

// Create a table to store
// results of subproblems
int L[n][n];

// Strings of length 1
// are palindrome of length 1
for (int i = 0; i < n; i++)
L[i][i] = 1;

// Build the table. Note that the lower diagonal
// values of table are useless and not filled in
// the process. c1 is length of substring
for (int cl=2; cl<=n; cl++)
{
for (int i=0; i<n-cl+1; i++)
{
int j = i+cl-1;
if (str[i] == str[j] && cl == 2)
L[i][j] = 2;
else if (str[i] == str[j])
L[i][j] = L[i+1][j-1] + 2;
else
L[i][j] = max(L[i][j-1], L[i+1][j]);
}
}

// length of longest palindromic subseq
return L[0][n-1];
}

// function to calculate minimum
// number of deletions
int minimumNumberOfDeletions(string str)
{
int n = str.size();

// Find longest palindromic subsequence
int len = lps(str);

// After removing characters other than
// the lps, we get palindrome.
return (n - len);
}

// Driver program to test above
int main()
{
string str = "geeksforgeeks";
cout << "Minimum number of deletions = "
<< minimumNumberOfDeletions(str);
return 0;
}
```

## Java

```//Java implementation to find minimum number
//of deletions to make a string palindromic
public class MindeletetoPalin
{
// Returns the length of the longest
// palindromic subsequence in 'str'
static int lps(String str)
{
int n = str.length();

// Create a table to store
// results of subproblems
int L[][] = new int[n][n];

// Strings of length 1
// are palindrome of length 1
for (int i = 0; i < n; i++)
L[i][i] = 1;

// Build the table. Note that the lower diagonal
// values of table are useless and not filled in
// the process. c1 is length of substring
for (int cl=2; cl<=n; cl++)
{
for (int i=0; i<n-cl+1; i++)
{
int j = i+cl-1;
if (str.charAt(i) == str.charAt(j) && cl == 2)
L[i][j] = 2;
else if (str.charAt(i) == str.charAt(j))
L[i][j] = L[i+1][j-1] + 2;
else
L[i][j] = Integer.max(L[i][j-1], L[i+1][j]);
}
}

// length of longest palindromic subsequence
return L[0][n-1];
}

// function to calculate minimum
// number of deletions
static int minimumNumberOfDeletions(String str)
{
int n = str.length();

// Find longest palindromic subsequence
int len = lps(str);

// After removing characters other than
// the lps, we get palindrome.
return (n - len);
}

// Driver program to test above
public static void main(String[] args)
{
String str = "geeksforgeeks";
System.out.println("Minimum number of deletions = "
+ minimumNumberOfDeletions(str));
}
}
// This code is contributed by Sumit Ghosh
```

Output:

```Minimum number of deletions = 8
```

Time Complexity: O(n2)

This article is contributed by Ayush Jauhari. 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.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
3.3 Average Difficulty : 3.3/5.0
Based on 18 vote(s)