Tandem Repeats? Educational Codeforces Round 163 (Rated for Div. 2) 1948D

Problem - D - Codeforces

题目大意:给出一个字符串s,s中可能存在能代表任意字母的?,如果一个长度为偶数的子串的前一半字母和后一半字母完全相同,则称这个子串合法,求s中最长的合法子串的长度

2<=字符串长度<=5000

思路:要找这样的合法子串相当于找一个长度为len子串str,使得这个子串,后面的len个字母组成的字符串和str相同,所以我们首先要确定的就是这样的Str的长度。

假设我们已经确定了当前要匹配的str的长度为len,那么要做的就是当前位置i和i+len的位置进行匹配,如果能匹配就就分别后移两个指针,直到匹配的字母数等于len,如果不匹配,因为要匹配的位置都是固定好的,所以下一个要匹配的位置就是失配位置的下一个位置。

那么对于一个固定的len,所以要查找一个合法的子串的时间复杂度是O(n)的,那么就可以遍历长度再找合法子串了。 

注意因为有?所以要重定义字符相等的规则

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
const ll MOD = 1e9 + 7;
ll n;
bool equal(char x, char y)
{if (x == y || x == '?' || y == '?'){//两字母相等或者其中之一是?就是相等return 1;}return 0;
}
void init()
{}
void solve()
{init();string str;cin >> str;n = str.length();int ans = 0;for (int len = n/2; len >= 1; len--){//枚举合法子串一半的长度int cnt = 0;for (int i = 0; i < n - len; i++){			int j = i + len;if (equal(str[i], str[j])){cnt++;//记录匹配的位置的数量				}else{cnt = 0;//否则重置匹配的位置数量,尝试匹配下一个位置}if (cnt == len){//匹配的位置等于长度,直接输出答案cout << cnt * 2 << '\n';return;}}}cout << ans;cout << '\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t;cin >> t;while (t--){solve();}return 0;
}

                                                                                                                 

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

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

相关文章

IO流(3)-文件字符输入\输出流

FIleReader(文件字符输入流&#xff09; 文件字符输出流代码示例 package com.zz.io;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader;public class Test4 {public static void main(String args[]) …

pycharm @NotNull parameter ‘module‘ of ...

下载了最新pycharm &#xff0c;无法启动运行 pycharm或者idea中Run/Debug Python项目报错 Argument for NotNull parameter ‘module‘ of … 解决方案 删除项目根目录的 idea 文件夹 随后重启&#xff0c;重新配置即可

LIN API call LINWakeup() ignored! due to LIN Interactive Master seetings!

在写使用CANoe写测试用例时&#xff0c;想控制LIN节点的休眠和唤醒&#xff0c;笔者想想这玩意再简单不过了&#xff0c;不过就是调用linWakeup()和linGotoSleep()嘛&#xff0c;可是越自信&#xff0c;现实总会给你啪啪啪打脸。实际写完验证并不能达到效果&#xff0c;看了下w…

WRF模型运行教程(ububtu系统)--III.运行WRF模型(官网案例)

零、创建DATA目录 # 1.创建一个DATA目录用于存放数据&#xff08;一般为fnl数据&#xff0c;放在Build_WRF目录下&#xff09;。 mkdir DATA # 2.进入 DATA cd DATA 一、WPS预处理 在模拟之前先确定模拟域&#xff08;即模拟范围&#xff09;,并进行数据预处理&#xff08…

Docker 哲学 - 容器操作

容器&#xff1a; 创建 停止 删除 强制删除&#xff08;正在运行&#xff09; run stop rm rm -f 列出本地容器&#xff1a; docker ps / docker container ls 镜像&#xff1a; search pull run &#xff1a; …

Altium Designer怎么设置默认原理图纸张大小

Altium Designer怎么设置默认原理图纸张大小 绘制原理图时我们需要设置好原理图图纸大小&#xff0c;建议大家可以将默认原理图图纸设置为A3&#xff0c;A3图纸大小可以容纳下大部分原理图&#xff0c;这样就不用每次画原理图前去修改图纸大小&#xff0c;可以提高设计效率。 …

java serlvet 高校学生画像平台系统Myeclipse开发mysql数据库web结构java编程计算机网页项目echarts图形展现

一、源码特点 java serlvet 高校学生画像平台系统是一套完善的java web信息管理系统 系统采用serlvetdaobean 模式开发本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCA…

代码随想录算法训练营第四十八天|动态规划|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

|121. 买卖股票的最佳时机 文章 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你…

sqllab第三关通关笔记

知识点&#xff1a; 通过回显的信息判断原始语句的组成猜测该语句为 select 1,2,3 from 表名 where id (输入) limit 0,1 首先通过测试判断存在什么类型的sql注入 构造id1/0 发现正常输出&#xff1b;说明是字符型的sql注入 好了&#xff0c;下面就测试有什么限制条件 构造…

AI视频矩阵混剪系统|罐头鱼AI批量混剪定时发送

AI视频矩阵混剪系统&#xff1a;智能创作与发布的完美结合 随着社交媒体平台的快速发展&#xff0c;视频已成为各行业推广和传播的热门方式。然而&#xff0c;对于许多人来说&#xff0c;制作高质量的视频仍然是一项挑战。Q:290615413但现在&#xff0c;有了AI视频矩阵混剪系统…

吴恩达深度学习笔记:神经网络的编程基础2.5-2.8

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.5 导数&#xff08;Derivatives&#xff09;2.6 更多的导数例子&#xff08;More Derivative Examples&…

提升自己最快的方式:《反本能》

今天我们会谈到提升自己最快的方式:“《反本能》”。学者李敖在北大演讲时曾说:“人要实现自由,必须反求诸己,对抗掉自己的本能。”从心所欲,任性而为,人只会被生存惯性牵着鼻子走。只有对抗住本性的诱惑,才不至于沦为自我的奴隶。专栏作家卫蓝就在著作《反本能》中详尽…

前端项目构建过程中的思考落地以及拓展

1统一通用解决方案 1.1主题样式变量色系 root 全局css变量 主题颜色 黑夜白天 或者其他 (pc,app) 1.2图表色系 基础组件 业务组件(pc,app) 大屏后台不同色系 1.3 多入口配置开发 比如 把 大屏 后台混合的 做区分配置(pc,app) 1.4 整体布局 头部菜单 搜索用户 ,菜单导航 ,右边的…

乐观锁与悲观锁

乐观锁和悲观锁是处理数据库并发操作的两种不同策略 乐观锁&#xff1a; 乐观锁的核心思想是“乐观”&#xff0c;它假设在数据处理过程中&#xff0c;冲突发生的概率较低。因此&#xff0c;乐观锁不会在事务开始时就锁定数据&#xff0c;而是在数据提交时检查是否有其他事务…

第二十章 构建和配置 Nginx (UNIX® Linux macOS)

文章目录 第二十章 构建和配置 Nginx (UNIX Linux macOS)Assumptions安装为CSP构建Nginx Web服务器 第二十章 构建和配置 Nginx (UNIX Linux macOS) 本页介绍如何构建和配置 Nginx Web 服务器&#xff0c;以便与 UNIX、Linux 或 macOS 上的 InterSystems Web Gateway 一起使用…

pta-分寝室

目录 输入格式&#xff1a; 输出格式&#xff1a; 输入样例 1&#xff1a; 输出样例 1&#xff1a; 输入样例 2&#xff1a; 输出样例 2&#xff1a; 思路 学校新建了宿舍楼&#xff0c;共有 n 间寝室。等待分配的学生中&#xff0c;有女生 n0​ 位、男生 n1​ 位。所有待…

Android Framework 之 Python

当然可以&#xff0c;我会尽量提供更详细的内容&#xff0c;并增加更多的例子和解释。以下是更详细的Python语言教程&#xff1a; Python语言教程 一、Python简介 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1989年底发明&#xff0c;第一个公开发行版发行于…

【快捷部署】002_Flink(1.17.2)

&#x1f4e3;【快捷部署系列】002期信息 编号选型版本操作系统部署形式部署模式002Flink1.17.2CentOS 7.Xtgz包单机 &#x1f449; 演示视频 Flink一键安装&#xff08;本地模式&#xff09; install-flink.sh 脚本内容 #!/bin/bash ####变量 ###执行脚本的当前目录 mydir$…

【linux】搜索所有目录和子目录下的包含.git的文件并删除

一、linux命令搜索所有目录和子目录下的包含.git的文件 在Linux系统中&#xff0c;要搜索所有目录和子目录下的包含.git的文件&#xff0c;可以使用find命令。find命令允许指定路径、表达式和操作来查找文件。 以下是使用find命令搜索包含.git的文件的方法&#xff1a; 1. 基…

权衡后台数据库设计中是否使用外键

目录 引言 外键简介 对比 真实后台项目中的权衡 结论 引言 在大学学习数据库课程时&#xff0c;我们会早早的接触到外键这一概念&#xff0c;同时我相信大部分人在懂了外键的概念后都会觉得外键很重要&#xff0c;在涉及多表一定要用&#xff0c;但后来在我接触到真实项目…