问题描述
有一些由英文字符组成的大小写敏感的字符串。请写一个程序,找到一个最长的字符串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); } }