查看: 1410| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] Palindrome Partitioning II discuss中的一段代码求解释

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
首先吐槽下。。。刷到110+,hard的题大部分都没思路了。。。有时还会发生做过的题再打开还是得想好久的情况。。。有没有人能帮忙给点建议。

这个题目,自己是用一个二维数组纪录是否为pal同时,从后往前不断更新每一个字母到末尾的字符串的需要的最小cut数。。。然后看了discuss,有一个方法只用o(n) space, 看了好久没看懂原理,能不能请大家帮忙分析下,谢谢了。
题目要求如下:

Given a string s, partition s such that every substring of the partition is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.


代码如下:不知道它是怎么来更新cut[]的。。。
  1. class Solution {
  2. public:
  3.     int minCut(string s) {
  4.         int n = s.size();
  5.         vector<int> cut(n+1, 0);  // number of cuts for the first k characters
  6.         for (int i = 0; i <= n; i++) cut[i] = i-1;
  7.         for (int i = 0; i < n; i++) {
  8.             for (int j = 0; i-j >= 0 && i+j < n && s[i-j]==s[i+j] ; j++) // odd length palindrome
  9.                 cut[i+j+1] = min(cut[i+j+1],1+cut[i-j]);

  10.             for (int j = 1; i-j+1 >= 0 && i+j < n && s[i-j+1] == s[i+j]; j++) // even length palindrome
  11.                 cut[i+j+1] = min(cut[i+j+1],1+cut[i-j+1]);
  12.         }
  13.         return cut[n];
  14.     }
  15. };
复制代码
不知道正不正常啊,第一次刷题,感觉很难啊,自己又贪玩。。。经常一天只能做三道题。。。主要是很多hard的题没思路。。。不知道是不是因为自己转专业,没系统学习的原因,还有些虽然做出来,总感觉是碰巧,没有说能达到,碰到题目,能分类题目,选择不同方法(如dfs,bfs,dp..)的阶段,特别是recursive的题目,对递归的理解和运用还是不清晰,请大家给点建议

上一篇:leetcode 谁有这些按照公司分类的题目列表?
下一篇:求问一个关于time complexity的概念问题
🔗
vivyao 2015-8-22 03:36:34 | 只看该作者
全局:
不太理解中间那两个循环。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表