题目 https://leetcode-cn.com/problems/minimum-insertion-steps-to-make-a-string-palindrome/
还是动态规划
dp[i][j] 为s[i~j]的成为回文串的最少插入次数
#define min(a,b) ((a)<(b)?(a):(b))
int minInsertions(char * s){
int s_len = strlen(s);
int **dp = malloc(sizeof(int*) * s_len);//dp[i][j] 为s[i-j]的成为回文串的最少插入次数
int i,j,k;
for(i=0;i<s_len;i++){
dp[i] = malloc(sizeof(int) * s_len);
}
for(i=0;i<s_len;i++){
for(j=0;j+i<s_len;j++){
if(i == 0){
dp[j][j+i] = 0;
}else if(i == 1){
if(s[j] == s[j+i]){
dp[j][j+i] = 0;
}else{
dp[j][j+i] = 1;
}
}else{
if(s[j] == s[j+i]){
dp[j][j+i] = dp[j+1][j+i-1];
}else{
dp[j][j+i] = min(dp[j+1][j+i],dp[j][j+i-1]) + 1;
}
}
}
}
j = dp[0][s_len-1];
for(i=0;i<s_len;i++){
free(dp[i]);
}
free(dp);
return j;
}