`
netalpha
  • 浏览: 81999 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

杰哥私房题──字串

J# 
阅读更多

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

	}

}
 
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics