【发布时间】:2012-01-15 07:30:23
【问题描述】:
对于两个字符串 A 和 B,我们将字符串的相似度定义为两个字符串共有的最长前缀的长度。例如,字符串“abc”和“abd”的相似度为2,而字符串“aaa”和“aaab”的相似度为3。 计算字符串 S 与其每个后缀的相似度总和
这是我的解决方案...
#include<stdio.h>
#include<string.h>
int getSim(char str[],int subindex)
{
int l2=subindex
int i=0;
int count=0;
for(i=0;i<l2;i++)
if(str[i]==str[subindex])
{
count++;
subindex++;
}
else
break;
return count;
}
int main()
{
int testcase=0;
int len=0;
int sum=0;
int i=0;
char s[100000];
scanf("%d",&testcase);
while(testcase--)
{
sum=0;
scanf("%s",s);
for(i=0;i<strlen(s);i++)
if(s[i]==s[0])
{
sum=sum+getSim(s,i);
}
printf("%d\n",sum);
}
}
我们如何使用后缀数组来解决这个问题??
【问题讨论】:
-
你觉得你的程序输出有什么不正确的地方?如果您正在寻找代码审查,请尝试 codereview.stackexchange... StackOverflow 适用于您需要回答的特定问题。
-
为什么说后缀数组?那不应该是一个 prefix 吗?
-
@glowcoder 我的程序的输出没有任何问题......但是当输入大小增加时它有点慢......比如说 100000 长度的字符串......所以有人建议使用后缀数组.....
标签: c suffix-array