现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
#include<stdio.h>
#include<string.h>int t,n;
char str[100][101];
int searchMaxSubString(char* source){
int subStrLen = strlen(source);
int sourceStrLen = strlen(source);
int i,j;
bool foundMaxSubStr;
char subStr[101],revSubStr[101];
while(subStrLen > 0)
{
for( i = 0; i <= sourceStrLen - subStrLen; i++)
{
strncpy(subStr,source + i,subStrLen);
strncpy(revSubStr,source + i,subStrLen);
subStr[subStrLen] = revSubStr[subStrLen] = '\0';
strrev(revSubStr);
foundMaxSubStr = true;
for(j = 0 ; j < n; j++)
if(strstr(str[j],subStr) == NULL && strstr(str[j],revSubStr) == NULL)
{
foundMaxSubStr = false;
break;
}
if(foundMaxSubStr) return(subStrLen);
}
subStrLen--;
}
return(0);
}
int main()
{
int i,minStrLen,subStrLen;
char minStr[101];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
minStrLen = 100;
for(i = 0; i < n;i++)
{
scanf("%s",str[i]);
if(strlen(str[i]) < minStrLen)
{
strcpy(minStr,str[i]);
minStrLen = strlen(minStr);
}
}
subStrLen = searchMaxSubString(minStr);
printf("%d\n",subStrLen);
}
return 0;
}
心得:
搜索到x0的每个子字符串,并且根据字符串的长度从倡导段开始判断,不要遗漏了任何子字符串。
确保代码简洁,高效:
strlen:计算字符串的长度。
strncpy:复制字符串的子串。
strcpy: 复制字符串。
strstr:在字符串中寻找子字符串。
strrev:对字符串进行反序。