AcWing 1222.密码脱落

news/发布时间2024/5/24 5:43:40

[题目概述]

X星球的考古学家发现了一批古代留下来的密码。
这些密码是由A、B、C、D 四种植物的种子串成的序列。
仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。
你的任务是:
给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。

输入格式

共一行,包含一个由大写字母ABCD构成的字符串,表示现在看到的密码串。

输出格式

输出一个整数,表示至少脱落了多少个种子。

数据范围

输入字符串长度不超过1000

输入样例1:

ABCBA

输出样例1:

0

输入样例2:

ABDCDCBABC

输出样例2:

3

输入给出的是减少字母后的字符串,需要我们求原来的字符串至少少了几个字母才变成现在的串,也就是让我们求最少添加几个字母能变成原来的镜像串,也就是回文串
回文串的特征就是左右对称,那每个字母都是成对出现的,现在不是回文串肯定就有字母是单个的,因此我们可以将单个的字母删除,剩下的字符还是回文串。
举个例子(样例2)

ABDCDCBABC
删除这三个字母后 变成了
ABCDCBA就是一个回文串了,并且最少得删除这三个,因此输出的答案就是3

那么现在我们就是要求该串中的最长回文序列的长度,再用总长度减去它就是答案。
注意:此处是回文序列,不是回文串,可以不连续。

状态表示:f[l][r]
*****集合:s[l,r]之间的回文子序列的长度
*****属性:最大值
状态计算:按回文子序列是否包含左右端点分
******l,r都包含:f[l + 1][r - 1] + 2
******含l不含r:f[l][r - 1](这个表达式表示的是一定不含r但含不含l不确定,他是包含我们这种含 l 不含r的情况,因为是求最大值,他所求出来的最大值肯定是包含我们这种情况的)
******含r不含l:f[l + 1][r]
******都不含:f[l + 1][r - 1]

我们可以合并成三种情况,最后一种情况肯定是比第一种情况小的。

  • 完整代码

有一个特殊的点,因为我们需要用到l + 1, r - 1这种,一定不能按顺序从大到小进行枚举。
有一种区间问题的通用办法就是先枚举区间长度,再枚举左端点,用二者求出右端点。
这样的话我们的更新一定都是在len的范围内,不会发生我们需要用但是还没求的情况。

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
const int N = 1010;
char s[N];
int f[N][N];
int main (){cin >> s;int n = strlen(s);for(int len = 1; len <= n; len ++){for(int l = 0; l + len - 1 < n; l ++){int r = l + len - 1;// 长度为1,是回文子序列,赋值为1if(len == 1) f[l][r] = 1;else{if(s[l] == s[r]) f[l][r] = f[l + 1][r - 1] + 2;else f[l][r] = max(f[l][r],max(f[l + 1][r], f[l][r - 1]));}}}cout << n - f[0][n - 1] << endl;return 0;
}
  • 本题的分享就结束了,这已经算是一个难题了,不容易想,转换也比较费劲。

记得点赞关注加收藏!

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

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

相关文章

k8s除了可以直接运行docker镜像之外,还可以运行什么? springboot项目打包成的压缩包可以直接运行在docker容器中吗?

Kubernetes&#xff08;k8s&#xff09;主要设计用于自动部署、扩展和管理容器化应用程序。虽然它与Docker容器最为密切相关&#xff0c;Kubernetes实际上是与容器运行时技术无关的&#xff0c;这意味着它不仅仅能够管理Docker容器。Kubernetes支持多种容器运行时&#xff0c;包…

说一下JVM创建对象的流程?

一、类加载检查。 在实例化一个对象的时候&#xff0c;JVM 首先会去检查目标对象是否已经被加载并初始化了。如果没有&#xff0c;JVM 需要立刻去加载目标类&#xff0c;然后调用目标类的构造器完成初始化。然后初始化的过程&#xff0c;主要是对目标类里面的静态变量、成员变…

钉钉小程序 访问ip不在白名单之中

钉钉小程序 访问ip不在白名单之中 problem 钉钉官方自带免登陆小程序 后端接口报错 {"errcode":60020,"errmsg":"访问ip不在白名单之中&#xff0c;请参考FAQ&#xff1a;https://open.dingtalk.com/document/org-faq/app-faq,request ip175.2.2.52…

SpringBoot+vue2联合打包部署,混合打包部署

SpringBootvue2联合部署&#xff0c;混合部署 前端工程和后端工程目前是都是相对独立性的模式进行开发的。 打包机 只拥有maven&#xff0c;没有nodejs 软件工程场景&#xff1a; 前后端工程在同一个父工程下面&#xff0c;作为一个子工程存在&#xff0c;各自独立开发。前…

大数据,对于生活的改变

谷歌通过对于疾病的查询量可以预测一个个h1n1病毒的大爆发&#xff0c; 大数据时代对于人的考验 用户的搜索记录就是一种信息&#xff0c;这种信息会满足其基础相关的词条与其有关的词条&#xff08;最为原始的搜索机制&#xff0c;国内的搜索引擎都是采用这种基础原理。&…

HTML动态彩虹字

效果&#xff1a; HTML&#xff1a; <div class"this-div">Elegant and Beautiful</div> CSS&#xff1a; .this-div{background-image: -webkit-linear-gradient(left, #147B96, #E6D205 25%, #147B96 50%, #E6D205 75%, #147B96);-webkit-text-fil…

Nginx缓存相关配置解析

文章目录 前言配置示例proxy_cacheproxy_cache_pathproxy_cache_keyproxy_cache_validproxy_cache_lockproxy_cache_methodsproxy_cache_bypassproxy_no_cacheproxy_cache_min_usesadd_header 可选项 使用示例通过响应头判断是否走缓存 缓存手动删除原博客 前言 客户端需要访问…

华为机考入门python3--(14)牛客14-字符串排序

分类&#xff1a;列表、排序 知识点&#xff1a; 字典序排序 sorted(my_list) 题目来自【牛客】 def sort_strings_by_lex_order(strings): # 使用内置的sorted函数进行排序&#xff0c;默认是按照字典序排序 sorted_strings sorted(strings) # 返回排序后的字符串列…

C#利用接口实现选择不同的语种

目录 一、涉及到的知识点 1.接口定义 2.接口具有的特征 3.接口通过类继承来实现 4.有效使用接口进行组件编程 5.Encoding.GetBytes(String)方法 &#xff08;1&#xff09;检查给定字符串中是否包含中文字符 &#xff08;2&#xff09;编码和还原前后 6.Encoding.GetS…

谷歌内部开发AI大语言模型“鹅”;OpenAI CEO 寻求大规模AI芯片全球生产投资

&#x1f989; AI新闻 &#x1f680; 谷歌内部开发AI大语言模型“鹅” 摘要&#xff1a;谷歌正在积极将AI技术融入其产品中&#xff0c;并为提升员工效率而开发了一个名为“鹅”的AI大语言模型。这一模型仅供公司内部团队使用&#xff0c;旨在辅助新产品的开发。据悉&#xf…

Vue中 如何监听键盘事件中的按键

在Web前端开发中&#xff0c;键盘事件的处理是非常常见的需求之一。而在Vue框架中&#xff0c;如何监听键盘事件中的按键是一个相对简单但又很实用的功能。本文将为你介绍如何在Vue中监听键盘事件&#xff0c;并演示一些常用的按键操作。 首先&#xff0c;在Vue中监听键盘事件…

MyBatis学习总结

MyBatis分页如何实现 分页分为 逻辑分页&#xff1a;查询出所有的数据缓存到内存里面&#xff0c;在从内存中筛选出需要的数据进行分页 物理分页&#xff1a;直接用数据库语法进行分页limit mybatis提供四种方法分页&#xff1a; 直接在sql语句中分页&#xff0c;传递分页参数…

GoLang语言基本代码整理

GoLang语言小白基本代码整理&#xff0c;包括常见转型&#xff0c;闭包&#xff0c;并法&#xff0c;锁&#xff0c;日志记录和回滚等 致力打造一个可以小白入门学习go语言的基本库&#xff0c;目前已经涵盖常见数据类型转型&#xff0c;闭包&#xff0c;并法&#xff0c;锁&am…

面试经典150题——生命游戏

​"Push yourself, because no one else is going to do it for you." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 之所以先暴力求解&#xff0c;是因为我开始也没什么更好的思路&#xff0c;所以就先写一种解决方案&#xff0c;没准写着写…

计算机视觉学习指南(划分为20个大类)

计算机视觉的知识领域广泛而庞杂&#xff0c;涵盖了众多重要的方向和技术。为了更好地组织这些知识&#xff0c;我们需要遵循无交叉无重复&#xff08;Mutually Exclusive Collectively Exhaustive&#xff0c;MECE&#xff09;的原则&#xff0c;并采用循序渐进的方式进行分类…

【ansible】认识ansible,了解常用的模块

目录 一、ansible是什么&#xff1f; 二、ansible的特点&#xff1f; 三、ansible与其他运维工具的对比 四、ansible的环境部署 第一步&#xff1a;配置主机清单 第二步&#xff1a;完成密钥对免密登录 五、ansible基于命令行完成常用的模块学习 模块1&#xff1a;comma…

Uniapp-开发小程序

文章目录 前言一、npm run xxx —— cross-env: Permission denied解决方法&#xff08;亲测有效&#xff09;其他解决方法&#xff1a; 二、macOS 微信开发者工具选择uniapp 用 vscode 开发 总结 前言 macOS下 uniapp 开发小程序。 一、npm run xxx —— cross-env: Permissi…

PostgreSQL定期清理归档(pg_wal)日志

运行了5个月的数据库&#xff0c;突然发现服务器磁盘快满了&#xff0c;一看是归档日志很大&#xff0c;打算写个脚本在不影响数据库运行的情况下定期清理PostgreSQL中的archive日志。 我的postgresql.conf中的归档日志配置&#xff08;不做配置的话默认归档日志在pg_wal中&…

【Hudi】Upsert原理

17张图带你彻底理解Hudi Upsert原理 1.开始提交&#xff1a;判断上次任务是否失败&#xff0c;如果失败会触发回滚操作。然后会根据当前时间生成一个事务开始的请求标识元数据。2.构造HoodieRecord Rdd对象&#xff1a;Hudi 会根据元数据信息构造HoodieRecord Rdd 对象&#xf…

开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

文章目录 前言源码获取一、认识PDFBox二、导入依赖三、基础功能demo1&#xff1a;读取pdf所有内容demo2&#xff1a;读取所有页内容&#xff08;分页&#xff09;demo3&#xff1a;添加页眉、页脚demo4&#xff1a;添加居中45文字水印demo5&#xff1a;添加图片到右上角 参考文…
推荐文章