这个题目如果我们判断两个字符串合成的新字符串是否出现过,这样复杂度会比较高(n^2),会TLE,以下是TLE代码(真特么短!)
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
char str[120005][30];
int main()
{
// freopen("out.txt","w",stdout);
int n = 0;
while(cin>>str[n])
{ n++; }
for(int k = 0;k <= n;k++)
{
int flag = 0;
for(int i = 0;i <= n && i != k;i++)
for(int j = 0;j <=n && i != k;j++)
{
char temp[50];
strcpy(temp,str[i]);
strcat(temp,str[j]);
if(!strcmp(temp,str[k])) {flag = 1;goto loop;}
}
loop:
if(flag) printf("%s\n",str[k]);
}
return 0;
}
我们不如去判断一个字符串拆成的两半是否都出现过,这样复杂度是n*m,其中m约是字符串的平均长度。