百练#2744子串

描述
现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
输入
输入的第一行是一个整数t (1 <= t <= 10),t表示测试数据的数目。对于每一组测试数据,第一行是一个整数n (1 <= n <= 100),表示已经给出n个字符串。接下来n行,每行给出一个长度在1和100之间的字符串。
输出
对于每一组测试数据,输出一行,给出题目中要求的字符串x的长度。
样例输入

2
3
ABCD
BCDFF
BRCD
2
rose
orchid

样例输出

2
2

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int N;
char str[110][110],substr[110],rsubstr[110];
int main(){
	int n,i,j;
	int l,minl,mini;
	int cnt,len;
	scanf("%d",&N);
	for(i = 0;i < N;++i){
		scanf("%d",&n);
		minl = 110;
		for(j = 0;j < n; ++j){//找最小子串
			scanf("%s",str[j]);
			l = strlen(str[j]);
			if(l < minl){
				mini = j;
				minl = l;
			}
		}
		for(len = minl;len > 0; --len){
			for(j = minl - len;j >= 0; --j){
				strncpy(substr,str[mini] + j,len);
				substr[len] = '\0';
				for(int k = len - 1;k >= 0; --k){//G++中没有strrev
					rsubstr[len - 1 - k] = substr[k];
				}
				rsubstr[len] = '\0';
				cnt = 0;
				for(int k = 0;k < n; ++k){//模式匹配
					if(strstr(str[k],substr) || strstr(str[k],rsubstr)){
						++cnt;
						continue;
					}
					else
						break;
				}
				if(cnt == n)
					break;
			}
			if(cnt == n)
				break;
		}
		printf("%d\n",len);
	}
	return 0;
} 

错误:
Compile Error
G++中没有strrev

没啥思路,库函数不会用:strstr, strncpy

发布了53 篇原创文章 · 获赞 0 · 访问量 740

猜你喜欢

转载自blog.csdn.net/weixin_38894974/article/details/104105220