【LeetCode-6195. hard】对字母串可执行的最大删除数

题干:力扣

 

解题报告:

刚开始觉得直接贪心选有短则短,但是发现不行,不能贪心有短的可以操作的则选短的。

三个方式想到倒着递推。一是直接记住这个特例,正推还倒推不能互相转换的特例。

二是因为dp[i]代表前i个的最大次数,这其实不只要保存最大次数这一个状态,还有可能很多局部最优解需要保存。怎么消除这个因素呢?就是怎么让他和子状态无关呢?倒着推,结合这题的题意,正好。

三是正难则反的思想。正着想是,dp[i]代表前i个能消除的最大次数,枚举最后一次消除次数,反着想,就是dp[i]代表从i到结尾都消除的最大次数,然后枚举第一次消除的字符串。然后一想,诶,这就是可解的了。

然后就是对于如何判断两个字符串的相等,可以字符串哈希,也可以用求LCP的板子。

AC代码:

class Solution {
public:unsigned long long H[5005];unsigned long long p[5005];// 都自然溢出即可int seed = 31, dp[5005];bool ok[5005][5005];unsigned long long cal(int l, int r) {if (l == 0) return H[r];return H[r] - H[l-1] * p[r-l+1];}int deleteString(string s) {H[0] = s[0]-'a'+1;p[0] = 1;for(int i = 1; i<s.size(); i++) p[i] = p[i-1]*seed;for(int i = 1; i<s.size(); i++) {H[i] = H[i-1]*seed + s[i] - 'a' + 1;}int ans = 0;int st = 0;for(int i = 0; i<s.size(); i++) {for(int j = i+1; j<s.size(); j+=2) {int len = j-i+1;if(cal(i, i+len/2-1) == cal(i+len/2, i+len-1)) ok[i][j] = 1;}}for(int i = s.size()-1; i>=0; i--) {dp[i] = 1;for(int j = i+1; j<s.size(); j+=2) {if(ok[i][j]) dp[i] = max(dp[i], dp[i+(j-i+1)/2] + 1);}}return dp[0];}
};

错误代码:(从前往后递推的)

class Solution {
public:unsigned long long H[5005];unsigned long long p[5005];// 都自然溢出即可int seed = 31, dp[5005];bool ok[5005][5005];unsigned long long cal(int l, int r) {if (l == 0) return H[r];return H[r] - H[l-1] * p[r-l+1];}int deleteString(string s) {H[0] = s[0]-'a'+1;p[0] = 1;for(int i = 1; i<s.size(); i++) p[i] = p[i-1]*seed;for(int i = 1; i<s.size(); i++) {H[i] = H[i-1]*seed + s[i] - 'a' + 1;}int ans = 0;int st = 0;for(int i = 0; i<s.size(); i++) {for(int j = i+1; j<s.size(); j+=2) {int len = j-i+1;if(cal(i, i+len/2-1) == cal(i+len/2, i+len-1)) ok[i][j] = 1;}}for(int i = 0; i<s.size(); i++) {dp[i] = -1;if(ok[0][i]) dp[i] = 1;for(int j = 1; j<i; j++) {if(i+i-j >= s.size()) continue;if(dp[j] != -1 && ok[j+1][i+i-j]) {dp[i] = max(dp[i], dp[j]+1);}}if(i != s.size()-1) ans = max(ans, dp[i]);}return max(ans+1, dp[s.size()-1]);}
};

LCP:

lcp[i][j] 表示 s[i:] 和 s[j:] 的最长公共前缀

        n = len(s)lcp = [[0] * (n + 1) for _ in range(n + 1)]  # lcp[i][j] 表示 s[i:] 和 s[j:] 的最长公共前缀for i in range(n - 1, -1, -1):for j in range(n - 1, i, -1):if s[i] == s[j]:lcp[i][j] = lcp[i + 1][j + 1] + 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【洛谷 P2034】选择数字(单调队列优化dp)

题目链接&#xff1a;选择数字 - 洛谷 解题报告&#xff1a; 思路1&#xff1a; 参考代码&#xff1a; #include<cstdio> #include<iostream> #include<deque> using namespace std; const long long Maxn10000020,inf0x3f3f3f3f; long long a[Maxn],s[Max…

了解Entity Framework中事务处理

Entity Framework 6以前&#xff0c;框架本身并没有提供显式的事务处理方案&#xff0c;在EF6中提供了事务处理的API。 所有版本的EF&#xff0c;只要你调用SaveChanges方法进行插入、修改或删除&#xff0c;EF框架会自动将该操作进行事务包装。这种方法无法对事务进行显式的控…

【LeetCode-769. medium】最多能完成排序的块

力扣 解题报告&#xff1a; 注意这种【根据一个要求&#xff0c;将数组分成多个区间】类模型的问题&#xff08;比如汽车加油站、加法表达式求和&#xff09;&#xff0c;套路就这三步&#xff1a; 1、初始化 2、for循环或者while&#xff0c;里面三步 2.1 更新 2.2 如果符合…

SQL Server Profiler工具

一、SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程&#xff0c;其作用如下&#xff1a; 图形化监视SQL Server查询&#xff1b;在后台收集查询信息&#xff1b;分析性能&#xff1b;诊断像死锁之类的问题&#xff1b;调试T-SQL语句&#xff1b;模拟重放…

【LeetCode856. medium】括号的分数

856. 括号的分数 解题报告&#xff1a; 括号问题考虑栈。 本来是想用栈做&#xff0c;但是发现其实得分是相加还是乘2&#xff0c;和括号的层级有关系。 比如第三层的括号之间就是相加&#xff0c;第二层的括号就是把第三层的分数和乘2。记得算完第二层的分之后&#xff0c;…

SharePoint Permission中6个表的关联关系**

1、UserInfo&#xff1a;定义所有user&#xff0c;对应的类为SPUser&#xff0c;以site collection为单位&#xff0c;tp_ID字段标识user的id值。 2、Groups&#xff1a;定义所有组&#xff0c;对应的类为SPGroup&#xff0c;以site collection为单位&#xff0c;ID字段表示组…

【LeetCode2434. medium】使用机器人打印字典序最小的字符串

2434. 使用机器人打印字典序最小的字符串 解题报告&#xff1a; 首先进行题意转换&#xff0c;其实上述两种操作描述的就是一个栈。 为什么要进行题意转换呢&#xff1f;因为你看题目说有两种操作&#xff0c;但是却不问最少的操作数&#xff0c;说明说不定这两种操作可以合并…

天猫精灵方糖拆解报告和芯片详解

折腾&#xff1a; 【记录】天猫精灵方糖拆解过程 后&#xff0c;下面详细整理关于芯片的信息。 总体截图&#xff1a; 各个单元&#xff1a; MEDIATEK ARM MT8516AAAA 1812-BZASH BET02027 ACMQPQ8K 【整理】SoC CPU MEDIATEK MT8516详解 SAMSUNG 810 K9F1G08U0F SC…

【LeetCode 904-medium】水果成篮

1、 这题做法多种多样&#xff0c;看能不能找到五种做法。 其实就是这道题&#xff1a; 力扣 力扣题我的AC代码&#xff1a;&#xff08;法1&#xff1a;边遍历边维护答案&#xff0c;如果遇到f[i]是第三个数就抛弃 除了f[i-1]的另一个数&#xff09; class Solution { pu…

【LeetCode-940 hard】不同的子序列 II

题干&#xff1a; 力扣 解题报告&#xff1a; dp[i]代表以s[i]结尾的子序列数量。 然后再加一层循环枚举倒数第二个字符。 dp之后考虑去重&#xff08;或者直接再用一个数组cnted[26]表示a~z字符结尾的子序列已经有多少个了&#xff09;然后直接作差就可以&#xff0c;因为…

天猫方糖 篇一:新版天猫放糖改造立体声

时间线&#xff1a; 2018年11月23日晚&#xff0c;通过分析得到新版天猫精灵可能支持立体声。后来经过不懈努力下&#xff0c;终于找到接线方式并且当晚测试成功&#xff0c;这将是是民间第一个支持立体声输出的天猫方糖。 2018年11月24日下午&#xff0c;在众群友的指导下&am…

【LeetCode-6223 hard】317场周赛. 移除子树后的二叉树高度

力扣 题干&#xff1a; 解题报告&#xff1a; 我做麻烦了 &#xff0c;其实两遍dfs就可以了&#xff0c;第一遍算高度&#xff0c;第二遍算深度&#xff0c;并且在第二次dfs的时候可以直接维护出答案数组&#xff1a;ans[i]代表删掉i为根节点的子树后树的高度。 其实主要的思…

LINQ TO SQL (一):1. 对象关系设计器(O/R 设计器)

对象关系设计器&#xff08;O/R 设计器&#xff09;的作用&#xff1a; 1. 提供了一个可视化设计图面&#xff0c;用于创建基于数据库中对象的 LINQ to SQL 实体类和关系&#xff1b;创建映射到数据库中的对象的对象模型。 2. 生成一个强类型 DataContext&#xff0c;用于在实体…

【LeetCode - 1235. hard】规划兼职工作

题干&#xff1a; 先来看简单版本&#xff1a; n个区间&#xff0c;求最大的不相交区间数 【51NOD—贪心算法专题】 D 做任务一 区间贪心最大不相交子区间数_荷叶田田_的博客-CSDN博客 如果限定这道题的报酬都是1&#xff0c;那么就转化成【最大不相交区间数】了。 那道题…

HTML 链接 强制打开“另存为...”弹出式文本链接打开HTML

现在的HTML5里有一个download属性&#xff0c;可以直接进行另存为&#xff0c;还可以自己重新命名文件。。。 <a href"file link" download"filename.ext" target"_blank">Click here to download</a> HTML <a> download 属性…

Office web app server2013详细的安装和部署

SharePoint 2013集成Office web apps server2013详细的安装和部署 安装前的需要理解的&#xff1a; 1、Office Web Apps 只能由使用基于声明的身份验证的 SharePoint 2013 Web 应用程序使用。Office Web Apps 呈现和编辑在使用经典模式身份验证的 SharePoint 2013 Web 应用程序…

借助office web apps实现在线预览和在线编辑

我所有的代码都是用go语言编写&#xff0c;你可以直接编译后使用&#xff0c;不用再有其他的操作。 最近项目实在太忙&#xff0c;这几天才有时间&#xff0c;这次是重头戏&#xff0c;要好好琢磨一下怎么写&#xff0c;才能更简洁的说清楚一切。 上一节&#xff0c;我们已经安…

Dbml文件提取建表TSql-CodeSmith

在昨天一个大学师弟&#xff0c;他问我能不能将LinqToSql文件转化为创建表的TSql语句&#xff0c;他是刚开始学习.NET&#xff0c;所以在网上下些示例看&#xff0c;但苦于没有数据库。所以就有了这一篇博客&#xff0c;作为我的Code生成技术的CodeSimth的最后一篇示例。在下一…

【转】新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序(续1)

上周星期天开通了博客并发布了第一篇文章《新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序》&#xff0c;汇集了一些比较流行的技术和开源项目&#xff0c;也把自己的程序架构、部分代码风格、前端表现简单做了一些展示&#xff0c;引起了近100位朋友的评论。特…

CCNA-Cisco-Packet-Tracerchs(思科官网)安装教程以及使用

Cisco-Packet-Tracerchs 思科官网模拟器&#xff0c;各大高校与中职都在使用。 但是由于支持的命令不太多&#xff0c;适用于NA阶段以及入门阶段的人群使用。 以下是免费百度网盘链接&#xff1a; https://pan.baidu.com/s/136fsYRnAfzGoj0DsQFaYTg 提取码: qa4e 复制这段内容…