You are on page 1of 1

#include <bits/stdc++.

h>
using namespace std;

// find if given string is K-Palindrome or not


int isKPalDP(string str1, string str2, int m, int n)
{
int dp[m + 1][n + 1];

// Fill dp[][] in bottom up manner


for (int i = 0; i <= m; i++)
{
for (int j = 0; j <= n; j++)
{
if (i == 0)
dp[i][j] = j;
else if (j == 0)
dp[i][j] = i;
else if (str1[i - 1] == str2[j - 1])
dp[i][j] = dp[i - 1][j - 1];
else
dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1]);
}
}

return dp[m][n];
}

bool isKPal(string str, int k)


{
string revStr = str;
reverse(revStr.begin(), revStr.end());
int len = str.length();

return (isKPalDP(str, revStr, len, len) <= k*2);


}

int main()
{
int a;
cin >> a;
for(int i = 0; i < a; i++)
{
string str;
int k;
cin >> k >> str;
isKPal(str, k) ? cout << 1 : cout << 0;
}

return 0;
}

You might also like