爱收集资源网

最长回文子串给你一个字符串s,找到s中最长的回文

网络整理 2022-05-16 04:03

最长回文子串

给定一个字符串s动态规划:从新手到专家(关于动态规划算法最精彩的中文描述,没,找出s中最长的回文子串。

括号生成

数字n代表括号生成的对数,请你设计一个函数,生成所有可能且有效的括号组合。

floyd算法描述_lru置换算法描述_动态规划:从新手到专家(关于动态规划算法最精彩的中文描述,没

'''

动态编程:

dp[i] 表示所有有效的组合

dp[i] = "(dp[p]的所有有效组合) + [dp[q]的组合]",其中1 + p + q = i,p从0遍历到i -1动态规划:从新手到专家(关于动态规划算法最精彩的中文描述,没,q对应从 i-1 到 0

/**
 * 动态规划
 * 从f(1),f(2),...,f(n-1)构建出f(n)
 *
 * 分析一个解的构成:必然从左括号开始,而这个开始的左括号必然对应着一个一个右括号,
 *     因此,任何一个解可以表示为 (A)B。
 * 令f(n) = (A)B  其中A和B是规模更小时问题的合法解,并且A、B可以为空,
 * 并且A中括号对数+B中括号对数之和为n-1
 *
 * 也就是说,可以从f(0),f(1),f(2),...,f(n-1构建出f(n),其中f0 = ""表示空解。
 */
public List<String> generateParenthesisDp(int n) {
    List<String>[] dp = new List[n+1];
    dp[0] = Arrays.asList("");
    for (int p = 1; p <= n; p++) {
        dp[p] = new ArrayList<>();
        for (int q = 0; q < p; q++) {
            for (String a : dp[q]) {
                for (String b : dp[p-q-1]) {
                    dp[p].add("("+a+")"+b);
                }
            }
        }
    }
    return dp[n];
}

最长 生成 字符