回文串(增减版)

简介: 回文串(增减版)

题目描述:

如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?

输入描述:

仅一行,为一个由字母和数字组成的字符串 s。

输出描述:

如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。

输入:applese

输出:No


解题思路:有三种思路;

① 寻找缺失字符,如果缺失字符小于等于1,那么就可以变成回文串

(偷来的代码如下)


21.png

21.png

②动态规划——
③补位:比如“abc”找到前后不一样的:试一下在后面补a→“abca”,判断是否是回文串,然后试在前面补c→“cabc”,再次判断。

(以下也是偷来的代码)

#include <stdio.h>
#include <string.h>
const int MAXN = 1e5;
char str[MAXN + 5];
int judge(int l, int r)
{
    while(l <= r && str[l] == str[r])
        l++, r--;
    if(l > r) return true;
    return false;
}
int main()
{
    scanf("%s", str + 1); //跳过0号位读入,方便补位
    int len = strlen(str + 1);
    int l = 1, r = len;
    while(str[l] == str[r] && l <= r)
        l++, r--;    
    if(l > r) {
        puts("Yes");
        return 0;
    }
    str[l - 1] = str[r];  //左补
    if(judge(l - 1, r)) {
        puts("Yes");
        return 0;
    }
    str[r + 1] = str[l]; //右补
    if(judge(l, r + 1)) {
        puts("Yes");
        return 0;
    }
    puts("No");
    return 0;
}
ps:emmm,另外一种与补位相同的思路:删除,先判断是否是回文串,是的话就是Yes,比如 “sls”就可以插入依旧是一个回文串“slls”。如果不是回文串的话,那么就从前后同时找不同的那个字母,删去,判断是否形成回文串,即可。
#include <iostream>
  #include <string>
  #include <algorithm>
  using namespace std;
  bool IsHuiWen(string str) //注意标明类型
 {
     for(int i = 0; i<(int)str.size()/2;i++){
         if(str[i] != str[str.size()-1-i])
         return false;
     }
     return true;
 }
 int main()
 {
     string str;
     cin>>str; 
         bool flag = false;
         int i;
         for(i = 0; i<(int)str.size()/2;i++) //强行转换类型,str.size求长度
         {
             if(str[i] != str[str.size()-1-i])
                 break;;
         }
         if(i == (int)str.size()/2)
             flag = true;
         else
             flag = (IsHuiWen(str.substr(i+1,str.size()-2*i-1)) || IsHuiWen(str.substr(i,str.size()-2*i-1)));    //substr函数:第一位是开始复制的起始位置,第二位是复制的长度。
         cout<< ((flag==true) ? "YES" : "NO")<<endl;
     return 0;
 }


相关文章
|
机器学习/深度学习 运维 算法
【KDD2024】面向集群整体作业运行变慢的异常检测
阿里云计算平台大数据基础工程技术团队主导,与浙江大学合作的论文《Cluster-Wide Task Slowdown Detection in Cloud System》被数据挖掘领域顶会ACM SIGKDD2024接收。论文从新的视角分析云计算平台集群健康状态,实现了基于神经网络的集群作业整体变慢异常定向检测,与SOTA异常检测算法相比平均提升F1 score 5.3%。
|
jenkins Java 持续交付
Jenkins 快速入门 (含Jenkins + Docker + Git 简单的自动化实操)(上)
Jenkins 快速入门 (含Jenkins + Docker + Git 简单的自动化实操)
|
C语言 C++
魔法指针 之 指针开篇
魔法指针 之 指针开篇
55 0
|
存储 SQL 关系型数据库
MySQL5.7到8.0的升级迁移!高效的MySQL跨版本迁移技术解读
NineData是一种高效、稳定且易于使用的迁移工具,可帮助用户将MySQL 5.7迁移到MySQL 8.0。由于MySQL 5.7已经结束生命周期并不再获得技术支持,因此迁移至MySQL 8.0是必要的。NineData提供了数据复制功能,包括数据迁移和实时同步,还支持双向复制。与传统迁移方法相比,NineData具有简单易用、数据一致、强劲性能和高可靠性的优势。它提供了完善的观测和干预能力,保障迁移的成功。此外,NineData还提供了对比功能,确保数据的一致性。通过简单的配置过程,用户可以实现自动化的数据迁移。NineData还提供了完善的观测和干预能力,帮助用户追踪迁移进展并诊断和修复
1861 3
|
机器学习/深度学习 存储 人工智能
AI入门必修,9分钟搭建文生图应用
《动手吧,开发者》由阿里云存储专家“征越”带来AI绘画平台Stable Diffusion的部署方式,领取文件存储NAS+模型在线服务PAI-EAS试用资源即可动实操!
|
网络协议 网络安全 数据安全/隐私保护
Ansible模块介绍——配置网络模块、上传下载文件模块
Ansible模块介绍——配置网络模块、上传下载文件模块
564 0
|
JavaScript 前端开发 开发者
【三十天精通Vue 3】 第三天 Vue 3的组件详解
【三十天精通Vue 3】 第三天 Vue 3的组件详解
329 2
我个人的ESC初体验
总的来说吧!这个东西特别的高级,但是我们要勇于尝试。
|
弹性计算 Kubernetes 负载均衡
通过kubeadm在Ubuntu1604下构建k8s高可用集群
本文参考了https://github.com/cookeem/kubeadm-ha,https://kairen.github.io/2018/07/17/kubernetes/deploy/kubeadm-v1.11-ha/,以及 https://jamesdeng.github.io/2018/08/21/k8s-1.11-%E9%98%BF%E9%87%8C%E4%BA%91%E5%AE%89%E8%A3%85.html,特别是第三个方案,解决了我在阿里云部署K8s高可用集群的大问题。
2978 0