CF1466-C. Canine poetry

题意:

给出一个字符串,这个字符串里面可能会包含多个回文子字符串。现在你可以任意修改这个字符串中的任意一个字符任意次数,问你最少多少操作数之后这个字符串中所有的回文子字符串的长度不超过1。


思路:

对于一个字符串,如果它想要是一个回文字符串,那么它需要先保证它内部是一个回文字符串,像\(abcdhedcba\)这个字符串,他非常像回文字符串,但是它最中间的部分不能构成回文字符串,所以它外面的字符无论是什么也就都没有意义了。现在我们就根据这个性质,只扫描构成长度为2或3的回文字符串然后将它破坏掉,那么它可能所在的更长的回文字符串也就被破坏了。

破坏字符串的时候,我们需要将原有的字符替换掉,但是这会引发一个新的问题:如果替换的字符又和其他字符构成了新的回文字符串,而每个字符只能被替换一次,所以显然这个字符不能随意替换。我们考虑一下,如果当前的字符串是ai,那么ai只要在替换前后不和ai-1,ai-2,ai+1,ai+2构成回文字符串就可以了,而ai-1,ai-2,ai+1,ai+2最多只包含4个字符,所以一定会有符合的字符,所以下面代码我用一个\(vis\)数组来记录一个字符是否被修改过,如果修改过那么这个字符无论如何都不可能被用来构成回文字符串。


AC代码:

#include <cstdio>
#include <cstring>
#include <iostream> const int maxn = 100005; char s[maxn], vis[maxn]; int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%s", s);
int len = strlen(s);
int ans = 0;
memset(vis, 0, sizeof vis);
for (int i = 1; i < len; i++) {
bool flag = false;
if (s[i] == s[i - 1] && !vis[i - 1]) {
flag = true;
} else if (i > 1 && s[i] == s[i - 2] && !vis[i - 2]) {
flag = true;
}
ans += flag;
vis[i] = flag;
}
printf("%d\n", ans);
} return 0;
}

最新文章

  1. Orchard源码--初步(1)
  2. Excel学习笔记
  3. windbg入门
  4. 第四次个人作业——关于微软必应词典android客户端的案例分析
  5. android点滴之ViewTreeObserver
  6. 判断comboBox是否选对了绑定的数据库中的项
  7. 在Qt中使用AnyCAD三维建模控件
  8. 团体程序设计天梯赛-练习集L1-015. 跟奥巴马一起画方块
  9. QListWidget代码刷新界面
  10. hdu 5533 Dancing Stars on Me(数学,水)
  11. 怎样使用jsp实现header和footer与网页内容的分离
  12. Chapter 2 Open Book——11
  13. T-SQL的进阶:超越基本级别3:构建相关子查询——701小组
  14. HashMap源码阅读
  15. 大学jsp实验4include,forword
  16. springMVC怎么接受前台传过来的多种类型参数?(集合、实体、单个参数)
  17. Django实战(一)-----用户登录与注册系统2(数据模型、admin后台、路由视图)
  18. angular4,angular6 父组件异步获取数据传值子组件 undefined 问题
  19. MySQL锁详解!(转载)
  20. python程序打包

热门文章

  1. 【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
  2. React 入门-redux 和 react-redux
  3. Python爬虫:数据分析小能手:JSON库的用法
  4. js 浮点数陷阱
  5. jQ实现图片无缝轮播
  6. 数据库 | 001-MySQL梳理系列(一)
  7. 使用EFCore连接Oracle数据库时出现的问题
  8. Vue基础之插值表达式的另一种用法!附加变量的监听!
  9. 使用Linux服务器来通过网络安装和激活Windows 7 —— 一些基本原理
  10. PyPy CPython C++ connects programs written in C and C++ with a variety of high-level programming languages