leetcode1312.让字符串成为回文串的最少插入次数

第一种写法:递归

java 复制代码
class Solution {
    private int minInsertions(String s, int left, int right) {
        //1.当字符串长度不超过1时不需要操作就已经是回文的了
        if (left >= right) {
            return 0;
        }
        //2。字符串长度超过1时
        //2.1字符串前后两个字符相等,不需要进行操作
        if (s.charAt(left) == s.charAt(right)) {
            return minInsertions(s, left + 1, right - 1);
        }
        //2.2字符串前后两个字符不相等,人为操作左或者右添加一个相等字符的操作数是1
        return 1 + Math.min(minInsertions(s, left + 1, right), minInsertions(s, left, right - 1));
    }
    public int minInsertions(String s) {
        return minInsertions(s, 0, s.length() - 1);
    }
}

第二种写法:记忆化搜索

java 复制代码
class Solution {
    private int[][] memory;
    private int minInsertions(String s, int left, int right) {
        //1.当字符串长度不超过1时不需要操作就已经是回文的了
        if (left >= right) {
            return 0;
        }
        //2.当记忆数组当中已经存储了这个值时,直接返回
        if (memory[left][right] != -1) {
            return memory[left][right];
        }
        //3。字符串长度超过1时
        //3.1字符串前后两个字符相等,不需要进行操作
        if (s.charAt(left) == s.charAt(right)) {
            return memory[left][right] = minInsertions(s, left + 1, right - 1);
        }
        //3.2字符串前后两个字符不相等,人为操作左或者右添加一个相等字符的操作数是1
        return memory[left][right] = 1 + Math.min(minInsertions(s, left + 1, right), minInsertions(s, left, right - 1));
    }
    public int minInsertions(String s) {
        memory = new int[s.length()][s.length()];
        for (int[] ints : memory) {
            Arrays.fill(ints, -1);
        }
        return minInsertions(s, 0, s.length() - 1);
    }
}

第三种写法:递推

java 复制代码
class Solution {
    public int minInsertions(String s) {
        int n = s.length();
        int[][] dp = new int[n][n];
        for (int i = n - 2; i >= 0; i--) {
            for (int j = i + 1; j < n; j++) {
                dp[i][j] = s.charAt(i) == s.charAt(j) ? dp[i + 1][j - 1] : 1 + Math.min(dp[i + 1][j], dp[i][j - 1]);
            }
        }
        return dp[0][n - 1];
    }
}
相关推荐
扶摇接北海17611 分钟前
洛谷:P1104 生日
算法
旖-旎15 分钟前
二分查找(寻找旋转排序数组中的最小值)(7)
c++·算法·二分查找·力扣
C羊驼16 分钟前
C/C++数据结构与算法:穷举法
c语言·c++·笔记·学习·算法
guoji778817 分钟前
Gemini 3.1 Pro 安全与对齐机制深度解析:可控性、合规性与企业级应用评估
大数据·人工智能·算法
小则又沐风a18 分钟前
[蓝桥杯 2014 省 AB] 蚂蚁感冒
算法·职场和发展·蓝桥杯
IT猿手1 小时前
基于强化学习Q-learning算法的无人机三维路径规划算法原理与实现,MATLAB代码
算法·matlab·无人机·路径规划·动态路径规划
qq_417695051 小时前
C++中的解释器模式
开发语言·c++·算法
y = xⁿ1 小时前
【LeetCodehot100】T108:将有序数组转换为二叉搜索树 T98:验证搜索二叉树
数据结构·算法·leetcode
程序员小崔日记1 小时前
一道KMP统考真题彻底讲透:nextval与滑动距离的本质
算法·408·王道计算机考研
xiaoye-duck1 小时前
《算法题讲解指南:动态规划算法--路径问题》--9.最小路径和,10.地下城游戏
c++·算法·动态规划