K - 子串翻转回文串 (字符串哈希)

news/2024/5/18 16:24:03/文章来源:https://blog.csdn.net/m0_64158084/article/details/129302749

Problem - K - Codeforces

给一个串 s = s1s2... sn,你可以选定其一个非空子串,然后将该子串翻转。具体来说,若选定的子串区间为 [l, r](1 ≤ l ≤ r ≤ n),则翻转后该串变为 s1s2... sl - 1srsr - 1... slsr + 1... sn

请你回答仅通过一次上述操作后,s 是否能变成回文串。串 s 是回文串,当且仅当它从左至右读出与从右至左读出完全相同,即 s1s2... sn = snsn - 1... s1。

Input

注意:本题包含多组测试数据。

第一行包含一个整数 T(1 ≤ T ≤ 5 × 105),表示数据组数。

接下来的 T 行,每行包含一个仅由英文小写字母组成的字符串 s,含义见题目描述,且串长 |s| 满足 1 ≤ |s| ≤ 5 × 105。

保证字符串总长 

 不超过 5 × 105。

Output

对于每组测试数据,输出一行一个字符串,若仅通过一次操作后 s 能变成回文串,则输出 Yes,否则输出 No,大小写不敏感。

Sample 1

InputcopyOutputcopy
4
abba
bacad
abacbaa
aabadcdca
Yes
No
Yes
Yes

Note

第一组数据中,abba 翻转带下划线的子串得到回文串 abba。

第二组数据中,无论如何翻转子串,都不能得到回文串。

第三组数据中,abacbaa 翻转带下划线的子串得到回文串 aabcbaa。

第四组数据中,aabadcdca 翻转带下划线的子串得到回文串 acdabadca。

 题解:

首先如果首尾开始找,相同字符肯定不用反转,找到第一个不同的,即为标记f

反转也有两种情况,是从左边边界反转,还是从右边边界反转,两种情况均要考虑

左边界和右边界为起点时枚举终点,直接去写肯定是不行的

所以要用到 字符串哈希,先正反预处理字符串,然后线性时间判断

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
using namespace std;
#define int long long
const int N = 6e5 + 10; 
int n;
int h1[N];
int h2[N];
int p[N];
int x = 133331;
int mod = 1e9 + 7;
char a[N];
void init()
{h1[0] = a[0];p[0] = 1;for(int i = 1;i <= n+1;i++){h1[i] = (h1[i-1]*x%mod + a[i])%mod;p[i] = p[i-1]*x%mod;}h2[n+1] = 0;h2[n] = a[n];for(int i = n - 1;i >= 0;i--){h2[i] = (h2[i+1]*x%mod + a[i])%mod;}
}
int get1(int l,int r)
{return (h1[r] - h1[l-1]*p[r-l+1]%mod + mod)%mod;
}
int get2(int l,int r)
{return (h2[l] - h2[r+1]*p[r-l+1]%mod + mod)%mod;
}
int check(int l,int r)
{int hs1 = (get1(0,n) - get1(l,r)*p[n-r]%mod + get2(l,r)*p[n-r]%mod + mod)%mod;int hs2 = (get2(0,n) - get2(l,r)*p[l]%mod + get1(l,r)*p[l]%mod + mod)%mod;return hs1 == hs2;
}
void solve()
{cin >> a;n = strlen(a) - 1;init();int f = -1;for(int i = 0;i <= n;i++){if(a[i] != a[n - i]){f = i;break;}}if(f == -1){cout <<"YES\n";return ;}for(int i = f + 1;i <= n - f;i++){if(check(f,i)||check(i,n - f)){cout <<"YES\n";return ;}}cout <<"NO\n";
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;cin >> t;while(t--){solve();} 
}
//3 F
//5 B
//6 F
//9 F
//10 B
//12 F
//15 FB
//18 FB

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

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

相关文章

真无线耳机哪个牌子好用?2023便宜好用的无线耳机推荐

蓝牙耳机经过近几年的快速发展&#xff0c;变得越来越普及&#xff0c;并且在一些性能上也做得越来越好。那么&#xff0c;真无线耳机哪个牌子好用&#xff1f;下面&#xff0c;我来给大家推荐几款便宜好用的无线耳机&#xff0c;可以参考一下。 一、南卡小音舱蓝牙耳机 参考…

[NOIP2001 提高组] Car 的旅行路线(C++,计算几何)

题目描述 又到暑假了&#xff0c;住在城市 A 的 Car 想和朋友一起去城市旅游。 她知道每个城市都有 444 个飞机场&#xff0c;分别位于一个矩形的 444 个顶点上&#xff0c;同一个城市中两个机场之间有一条笔直的高速铁路&#xff0c;第 iii 个城市中高速铁路的单位里程价格为…

哈希一致性算法(分布式服务器落点算法)

场景预设和一般hash算法&#xff1a; 先预设一个场景&#xff0c;有10000份文件&#xff0c;需要缓存到五台缓存服务器之上 那么按照最常规&#xff0c;每个服务器平均分配2000份文件 那么用一个取余操作就可以完成 比如说是第2513的图片&#xff0c;那么用一个公式 需要缓…

网络层:IP协议

目录 基本概念 IP报头 IP报文分片 为什么要分片&#xff1f; 如何分片&#xff1f; 分片的报文如何组装&#xff1f; 分片策略如何&#xff1f; 网段划分 IP地址被分成了五类IP&#xff1a; CIDR 特殊的IP地址&#xff1a; 私有IP和公网IP 路由 如何转发数据包&a…

信创-东方通和达梦适配

1 TLQ8.0 简单的例子&#xff0c;发送MQ&#xff0c;然后收消息连接是一样的&#xff0c;要不断去拉取数据消费的public static void main(String[] args) {//发送消息的目的队列String queName "lq";//连接工厂类QueueConnectionFactory queueConnectionFactory n…

面试官:为什么说ArrayList线程不安全?

本博客知识点收录于&#xff1a;⭐️《JavaSE系列教程》⭐️ 1&#xff09;线程安全与不安全集合 我们学习集合的时候发现集合存在由线程安全集合和线程不安全集合&#xff1b;线程安全效率低&#xff0c;安全性高&#xff1b;反之&#xff0c;线程不安全效率高&#xff0c;安…

Person p=new student()是什么意思

记住&#xff1a;父类引用子类对象 Student t new Student(); 实例化一个Student的对象&#xff0c;这个不难理解。但当我这样定义时&#xff1a;Person p new Student(); 这代表什么意思呢&#xff1f; 很简单&#xff0c;它表示我定义了一个Person类型的引用&#xff0c;指…

招生咨询|浙江大学MPA项目2023年招生问答与通知

问&#xff1a;报考浙江大学MPA的基本流程是怎么样的&#xff1f; 答&#xff1a;第一阶段为网上报名与确认。MPA考生须参加全国管理类联考&#xff0c;网上报名时间一般为10月初开始、10月下旬截止&#xff0c;错过网上报名时间后不能补报。确认时间一般为11月上旬&#xff0c…

从0开始学python -46

Python CGI编程 什么是CGI CGI 目前由NCSA维护&#xff0c;NCSA定义CGI如下&#xff1a; CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如&#xff1a;HTTP服务器&#xff0c;提供同客户端HTML页面的接口。 网页浏览 为了更好的了解CGI是如何工作…

npm install开发依赖(devDependencies)一个也没下载下来,npm本地下载的包全都跑到全局的npm下面去了

有两种情况 1 下载node的时候给环境变量配置了生成环境&#xff0c;如图 并且给npm配置文件中配置了production true&#xff0c;如图 查看配置文件中的内容&#xff1a; npm config list 修改配置文件中的production&#xff1a; npm config set production false 2 我其实…

【日常总结】Docker 磁盘占满解决方案

目录 项目背景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; Step 1&#xff1a;查看硬盘使用情况 Step 2&#xff1a;安装crontab Step 3&#xff1a;编写清理脚本cleardockerlog.sh&#xff0c;并执行一次 Step 4&#xff1a;加入定时任务,并设置…

【数据结构初阶】手把手带你实现栈

前言 在进入数据结构初阶的学习之后&#xff0c;我们学习了顺序表和链表&#xff0c;当然栈也是一种特殊的数据结构&#xff0c;他的特点是后进先出。 栈的概念及结构 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。限定仅在表尾进行插入和删…

数组一次性删除多条数据

需求描述 最后提交时删除表格中的空行 实现方法 单行删除 - 并不是一次性删除 表格每行的最后设置删除按钮&#xff0c;点击时将当前行的索引传递给方法&#xff0c;splice 删除当前行。 <el-table :data"tableData" class"myTable" border>..…

Chrome访问新版bing(玄学,需要魔法)

文章目录前提1. 需要魔法2. 申请过使用新版bing&#xff0c;并且收到通过的邮件。没有的话先申请&#xff0c;加入waiting list&#xff08;不赘述&#xff0c;自行百度&#xff09;配置1. Chrome安装插件&#xff08;Header Editor&#xff09;2. Header Editor添加规则3. 允许…

一次失败的面试经历:我只想找个工作,你却用面试题羞辱我!

金三银四近在咫尺&#xff0c;即将又是一波求职月&#xff0c;面对跳槽的高峰期&#xff0c;很多软件测试人员都希望能拿一个满意的高薪offer&#xff0c;但是随着招聘职位的不断增多&#xff0c;面试的难度也随之加大&#xff0c;而面试官更是会择优录取小王最近为面试已经焦头…

【数据库专题】数据库Mongodb之深入认知云计算三种服务方式、mongodb特点、mongodb重要进程 mongod、mongo、其他进程区别

文章目录一、什么是云计算1. IaaS:基础设施即服务2. SaaS:软件即服务3. PaaS:平台即服务二、大数据与云计算关系三、什么是MongoDB四、大数据与MongoDB五、MongoDB特点六、安装MongoDB七、重要进程介绍7.1 mongod进程7.2 mongo进程7.3 其他进程7.3.1 mongodump重建数据库7.3.2 …

动态网站开发讲课笔记04:Servlet基础

文章目录零、本节学习目标一、Servlet基础&#xff08;一&#xff09;Servlet概述1、Servlet是什么2、Servlet容器3、Servlet应用程序的体系结构&#xff08;二&#xff09;Servlet的特点1、功能强大2、可移植3、性能高效4、安全性高5、可扩展&#xff08;三&#xff09;Servle…

ESP-C3入门14. 实现基本的web server

ESP-C3入门14. 实现基本的web server一、ESP32 IDF创建WEB SERVER的流程1. 配置web服务器2. 注册 URI处理器3. 实现 URI处理器函数4. 处理HTTP请求5. 处理web socket连接6. 注册 URI 处理函数7. 启动HTTP服务器8. 发送响应9. 关闭 http 服务二、本要主要使用API的说明1. httpd_…

Qt信号与槽机制——新手友好

目录 一 为什么会有这个机制 二 信号与槽是什么 三 信号 四 槽 五 使用 1 最简单的 2 函数指针 3 用Lambda表达式实现 一 为什么会有这个机制 我们平时的一个网页&#xff0c;如果点击网页上不同的部分会有不同的相应动作。比如点击超链接就会实现网页的跳转&#xff0c…

机器学习笔记之狄利克雷过程(三)随机测度的生成过程(折棍子过程)

机器学习笔记之狄利克雷过程——随机测度的生成过程[折棍子过程]引言回顾&#xff1a;狄利克雷过程——定义随机测度的生成过程从随机测度的生成过程观察标签参数α\alphaα与随机测度离散程度之间的关系引言 上一节使用公式推导的方式介绍了狄利克雷过程中标量参数α\alphaα…