Redian新闻
>
请教一个字符串比较排序的问题 (转载)
avatar
请教一个字符串比较排序的问题 (转载)# JobHunting - 待字闺中
a*r
1
这题如果用DP来做,哪位给分析一下什么是subproblem?
【 以下文字转载自 Programming 讨论区 】
发信人: minisand (老婆是A+海博), 信区: Programming
标 题: 请教一个字符串比较排序的问题
发信站: BBS 未名空间站 (Mon Nov 9 16:35:46 2009, 美东)
之前有人贴出了常见的那个求Maximum repetitive substring的代码,如下:
void MaxDuplicatedSubstring(char *input, char *result)
{
int length = strlen(input);
char **substrings = new char**[length];
for (int i=0; i < length; i++)
substrings[i] = input + i;
qsort(substrings, length, sizeof(char*), (int (*)(const void*, const void*
))strcmp);
int max = 0;
int index = -1;
for (int i=0; i < length - 1; i++)
{
int c = 0;
while (substrings[i][c] && substrings[i+1][c] && substrings[i][c] ==
substrings[i+1][c]) c++;
if (c > max) {max = c; index = i;}
}
if (index >= 0)
memmove(result, substrings[index], max);
result[max] = 0;
delete [] substrings;
}
我试了一下,qsort后substrings和排序前的substrings一样。举例:for abcabc:
substrings排序前是{abcabc,bcabc,cabc,abc,bc, c},排序后还是{abcabc,
bcabc,cabc,abc,bc, c},而不是预期的{abc,abcabc,bc,bcabc,c,cabc}。
后来我自己写了个简单的冒泡排序代码来排序substrings,并对这个排序结果再运用一
遍qsort,发现还是回到最初的substrings。
难道这个qsort实质的排序对象是字符串地址而不是字符串内容?
谢谢大家赐教。
avatar
r*g
2
check programming perals. seems you used wrong data structure.
avatar
a*r
3

That's not my post, I just curious about how to do it using DP.
There are a few solutions:
1.programming pearl - suffix array O(n^3)
2.suffix tree
3.DP
To slove with DP, first thing is to figure out the sub-problem, I am not
sure what's the sub-problem, that's why I am asking.

【在 r*******g 的大作中提到】
: check programming perals. seems you used wrong data structure.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。