以下是引用azzbcc在2016-12-14 10:43:25的发言:
正确性毋庸置疑,我也测试了len+1,吹水佬版主觉得呢
正确性毋庸置疑,我也测试了len+1,吹水佬版主觉得呢
我是按规则数组各组顺序取出(不重复)的字符作为初始输出字符串。
这个要看首先假设的字符串排列,如果一开始就是 abcde 就快好多了, 可以试试初始为 edcba, 看看有什么不同。
可以跟踪一下m的变化看看。
程序代码:#include <stdio.h>
char * fun(char array[][3], int len, char * ans)
{
char m[26][26] = {0}, d[26] = {0}, t[26] = {0}, * r = ans;
int i, j;
for(i = 0; i < len; i++)
{
char a = array[i][0] - 'a';
char b = array[i][1] - 'a';
char c = array[i][2] - 'a';
if(!m[a][b]) m[a][b] = 1, d[b]++;
if(!m[b][c]) m[b][c] = 1, d[c]++;
t[a] = t[b] = t[c] = 1;
}
for(i = 0; i < 26; i++)
{
if(!t[i] || d[i]) continue;
for(t[i] = j = 0; j < 26; j++) d[j] -= m[i][j];
*(r++) = i + 'a';
i = -1;
}
*r = 0;
return ans;
}
int main()
{
char array[1024][3], ans[32];
int len, i, j;
for(; ~scanf("%d\n", &len); puts(fun(array, len, ans)))
for(i = 0; i < len; i++)
scanf(" %c %c %c", &array[i][0], &array[i][1], &array[i][2]);
return 0;
}
