cf(163)

D. Tandem Repeats?

找最长串联字串的长度

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef pair<int,int>PII;
typedef long long ll;
const int N=2e5+10;
ll a[N];

int main()
{
	int t;cin>>t;
	while(t--)
	{
	   string s;cin>>s;
	   int ans=0;
	   for(int k=1;k*2<=s.size();k++)
	   {
	   	   int cnt=0;
	   	   for(int i=0;i+k<s.size();i++)
	   	   {
	   	       if(s[i]==s[i+k]||s[i]=='?'||s[i+k]=='?') cnt++;
			   else cnt=0;
			   if(cnt==k)
			   {
			      ans=k;
				  break;   	
		    	 }  	
		   }
	   }
	   cout<<2*ans<<endl;
	}
    return 0;
}
cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef pair<int,int>PII;
typedef long long ll;
const int N=2e5+10;
ll a[N];

int main()
{
	int t;cin>>t;
	while(t--)
	{
	   string s;cin>>s;
	   int ans=0;
	   for(int x=2;x<=s.size();x+=2)
	   {
	   	int ok=0;
	   	int y=x/2;
	   	for(int i=0;i<y;i++)
	   	{
	        if(s[i]==s[i+y]||s[i]=='?'||s[i+y]=='?') ok++;  		
	    }
	    if(ok==y) 
	    {
	    	ans=x;
	    	continue;
		}
		for(int i=0;i<s.size();i++)
		{
			int r=i+x;
			if(r>s.size()) break;
			if(s[i]==s[i+y]||s[i]=='?'||s[i+y]=='?') ok--;
			if(s[r]==s[r-y]||s[r]=='?'||s[r-y]=='?') ok++;
			if(ok==y)
			{
				ans=x;
				break;
			}
		}
	   }
	   cout<<ans<<endl;
	}
    return 0;
}
相关推荐
宣宣猪的小花园.4 分钟前
【机器学习】损失函数与梯度下降:机器如何通过“犯错”不断变好
人工智能·算法·机器学习
雪落漂泊20 分钟前
C++11(上)
开发语言·c++
青山木35 分钟前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
春涧草茶42 分钟前
慢就是快12-2三种访问权限|getter与setter|魔法方法
开发语言·python
無限進步D1 小时前
Java Web 前端 简介
java·开发语言·前端·css·html·css3·web
土司大王1 小时前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode
不穿鞋的懒羊羊1 小时前
STL容器
算法
huang5791471 小时前
多线程环境下的共享数据结构安全问题分析4
算法
qq_401700411 小时前
Qt QUrl 详解与代码示例
开发语言·数据库·qt
zh路西法1 小时前
【玩转VLA具身智能机械臂】(四):点云分割与 OBB 夹取——从 PCA 失效到主动扫描
c++·机械臂·pca·vla·planner·obb·moveit2