1312. 让字符串成为回文串的最少插入次数 Minimum Insertion Steps to Make a String Palindrome

题目 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;
}

猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/111648182