杰哥私房题──字串

问题描述
有一些由英文字符组成的大小写敏感的字符串。请写一个程序,找到一个最长的字符串x,
使得:对于已经给出的字符串中的任意一个y,x 或者是y 的子串、或者x 中的字符反序之

后得到的新字符串是y 的子串。
输入:输入的第一行是一个整数t (1 <= t <= 10),t 表示测试数据的数目。对于每一组测试
数据,第一行是一个整数n (1 <= n <= 100),表示已经给出n 个字符串。接下来n 行,每行
给出一个长度在1 和100 之间的字符串。
输出:对于每一组测试数据,输出一行,给出题目中要求的字符串x 的长度;如果找不到
符合要求的字符串,则输出0。
输入样例
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
输出样例
2
2

#include <stdio.h>

#include <string.h>

char str[100][101];


void reverse(int k){

	int i;

	int length = strlen(str[k]);

	for(i = 0; i < length / 2; i++){

		char tp = str[k][i];

		str[k][i] = str[k][length - i - 1];

		str[k][length - i -1] = tp;

	}

}



int findSubString(int num){

	int j;

	int length = strlen(str[0]);

	int slength = length;

	while(length > 0){

		int k, find;

		char temp[101];

		for(k = 0; k <= slength - length; k ++){

			find = 1;

			strncpy(temp, str[0] + k, length);

			temp[length] = '\0';

			for(j = 1; j < num; j ++){

				if(strstr(str[j], temp) == NULL){

					reverse(j);

					if(strstr(str[j], temp)  == NULL){

						find = 0;

						break;

					}

				}

			}

			if(find)

			return length;

		}	

		length --;

	}

	return 0;

}



void main(void){

	int nCases, subStrLen;

	scanf("%d", &nCases);

	while(nCases--){

		int num, i;

		scanf("%d", &num);

		for(i = 0; i < num; i++){

			scanf("%s", str[i]);

		}

		subStrLen = findSubString(num);

		printf("%d\n", subStrLen);

	}

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值