#codingexercise
We find the maximum number of deletions to make a string palindrome
We can use modified Levenshtein distance to find this number
int GetCount(String A)
{
String R = A.reverse();
int n = A.Length;
int[,] dp = new int [n+1,n+1];
for (int i = 0; i < =n; i++)
{
dp[0,i] = i;
dp[i,0] = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
if (A[i-1] == R[j-1])
dp[i,j] = dp[i-1,j-1];
else
d[[i,j] = 1 + Math.Min(dp[i-1,j], dp[i,j-1]);
}
int res = INT_MAX;
int i = n;
int j = 0;
while (i >= 0)
{
res = Math.Min(res, dp[i,j]);
if ( i < n)
res = Math.Min(res, dp[i+1,j]);
if (i > 0)
res = Math.Min(res, dp[i-1,j]);
i--;
j++;
}
return res;
}
"book"
"koob"
dp
0 1 2 3 4
1 2 3 4 3
2 3 2 3 4
3 4 3 2 3
4 3 4 5 6
Minimum value is 2
Courtesy: geeksforgeeks
We find the maximum number of deletions to make a string palindrome
We can use modified Levenshtein distance to find this number
int GetCount(String A)
{
String R = A.reverse();
int n = A.Length;
int[,] dp = new int [n+1,n+1];
for (int i = 0; i < =n; i++)
{
dp[0,i] = i;
dp[i,0] = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
if (A[i-1] == R[j-1])
dp[i,j] = dp[i-1,j-1];
else
d[[i,j] = 1 + Math.Min(dp[i-1,j], dp[i,j-1]);
}
int res = INT_MAX;
int i = n;
int j = 0;
while (i >= 0)
{
res = Math.Min(res, dp[i,j]);
if ( i < n)
res = Math.Min(res, dp[i+1,j]);
if (i > 0)
res = Math.Min(res, dp[i-1,j]);
i--;
j++;
}
return res;
}
"book"
"koob"
dp
0 1 2 3 4
1 2 3 4 3
2 3 2 3 4
3 4 3 2 3
4 3 4 5 6
Minimum value is 2
Courtesy: geeksforgeeks
No comments:
Post a Comment