列表

详情


NC212564. 小波的2020

描述

2020年是特殊的一年,当然并不是特殊在疫情,奥运会等等,而是因为2020是拥有一个非原串的前缀与它的一个后缀相同(前缀的“20”与后缀的“20”,并不是“2020”,因为这个前缀为原串),现在小波得到了一个由26个小写字母组成的字符串s,他想知道这个字符串是否存在一个前缀q,q是特殊的,如果有输出最长的q的长度,否则输出0。

输入描述

第一行一个字符串s,

输出描述

一个整形数表示答案。

示例1

输入:

ababbbaasdz

输出:

8

说明:

答案为8(ababbbaa(原字符串前缀)),存在前缀'a'与后缀'a'相等,故其为特殊的

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 532K, 提交时间: 2020-09-23 12:40:37

#include<bits/stdc++.h>
using namespace std;
int main(){
	char s[1005];
	bool vis[30];
	scanf("%s", s);
	int len = strlen(s);
	int ans = 0;

		for(int j = len - 1; j > 0; j--){
			if(s[0] == s[j]){
				for(int k = 0; j + k < len && s[0 + k] == s[j + k]; k++)
				    ans = max(ans, j + k + 1);
				break;
			}
		}
	
	
	printf("%d\n", ans);
}	
	
	
	
	

C++11(clang++ 3.9) 解法, 执行用时: 2ms, 内存消耗: 492K, 提交时间: 2020-09-21 23:40:29

#include<iostream>
#include<cstring>
using namespace std;
char s[1007];
int main(){
	scanf("%s",s+1);
	int len=strlen(s+1),ans=0,p=-1;
	for(int i=2;i<=len;i++){
		if(s[i]==s[1]){
			p=i;
		}
	}
	if(p!=-1){
		ans=p;
		for(int i=1;i+p<=len;i++){
			if(s[i+p]==s[1+i]){
				ans=i+p;
			}
			else{
				break;
			}
		}
	}
	printf("%d\n",ans);
}

上一题