首页 > 其他 > 详细

leetcode1278 Palindrome Partitioning III

时间:2019-12-26 01:33:16      阅读:80      评论:0      收藏:0      [点我收藏+]

思路:

使用动态规划,dp[i][j]表示将子串s[0..i]划分成j个回文串所需要的最小修改次数。

实现:

 1 class Solution
 2 {
 3 public:
 4     int palindromePartition(string s, int k)
 5     {
 6         int n = s.length();
 7         vector<vector<int>> m(n, vector<int>(n, 0x3f3f3f3f));
 8         for (int i = n - 1; i >= 0; i--)
 9         {
10             for (int j = i; j < n; j++)
11             {
12                 if (j == i) m[i][j] = 0;
13                 else if (j == i + 1) m[i][j] = s[i] != s[j];
14                 else
15                 {
16                     m[i][j] = m[i + 1][j - 1];
17                     if (s[i] != s[j]) m[i][j]++;
18                 }
19             }
20         }
21         vector<vector<int>> dp(n, vector<int>(k + 1, 0x3f3f3f3f));
22         for (int i = 0; i < n; i++)
23         {
24             dp[i][1] = m[0][i];
25             for (int p = 2; p <= min(k, i + 1); p++)
26             {
27                 for (int j = 0; j < i; j++)
28                 {
29                     dp[i][p] = min(dp[i][p], dp[j][p - 1] + m[j + 1][i]);
30                 }
31             }
32         }
33         return dp[n - 1][k];
34     }
35 }

leetcode1278 Palindrome Partitioning III

原文:https://www.cnblogs.com/wangyiming/p/12099855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!