问个算法题# JobHunting - 待字闺中B*12011-11-10 08:111 楼求一个字符中连续出现次数最多的子串abcbcbcabc 中,连续出现的字符串为bc,连续三次abcccabc中,最多的为c要是不要求连续的话用suffix array很好弄,但是连续的,怎么弄才好呢?谢谢。
l*c2011-11-10 08:112 楼suffix tree【在 B*******1 的大作中提到】: 求一个字符中连续出现次数最多的子串: abcbcbcabc 中,连续出现的字符串为bc,连续三次: abcccabc中,最多的为c: 要是不要求连续的话用suffix array很好弄,但是连续的,怎么弄才好呢?: 谢谢。
q*x2011-11-10 08:113 楼不连续的我也不会。谁给讲讲?【在 B*******1 的大作中提到】: 求一个字符中连续出现次数最多的子串: abcbcbcabc 中,连续出现的字符串为bc,连续三次: abcccabc中,最多的为c: 要是不要求连续的话用suffix array很好弄,但是连续的,怎么弄才好呢?: 谢谢。
a*22011-11-10 08:116 楼画一颗后缀树,建立过程中存在的节点就将这个节点加一,不存在就创建并设为1,最后找出最大计数路径。其实很好理解,后缀树是字符串所有后缀的字串的集合而成的,计数就相当于统计字串的出现频率连续的话用就不知道怎么弄了
q*x2011-11-10 08:117 楼abcd, bc不是前缀也不是后缀啊?【在 a**********2 的大作中提到】: 画一颗后缀树,建立过程中存在的节点就将这个节点加一,不存在就创建并设为1,最: 后找出最大计数路径。: 其实很好理解,后缀树是字符串所有后缀的字串的集合而成的,计数就相当于统计字串: 的出现频率: 连续的话用就不知道怎么弄了
b*g2011-11-10 08:118 楼这个suffix tree本身就是连续substring啊。你的意思是不是“如果不是连续的就不知道怎么弄了”?【在 a**********2 的大作中提到】: 画一颗后缀树,建立过程中存在的节点就将这个节点加一,不存在就创建并设为1,最: 后找出最大计数路径。: 其实很好理解,后缀树是字符串所有后缀的字串的集合而成的,计数就相当于统计字串: 的出现频率: 连续的话用就不知道怎么弄了
b*g2011-11-10 08:119 楼bcd 是后缀,而且在suffix tree里面,bc是从root出发的substring。可以bottom up计数,正如airplane1022所描述的。【在 q****x 的大作中提到】: abcd, bc不是前缀也不是后缀啊?
m*q2011-11-10 08:1110 楼我觉得连续的子串也可以用suffix array啊比如 abcbcbcabc0123456789 0 abc 9 abcbcbcbcabc5 bcabc3 bcbcabc1 bcbcbcabc9 c6 cabc4 cbcabc2 cbcbcabc把sort后的array扫一遍,对于相邻的两个子串,判断它们的最长公共前缀的长度是否是个等差数列,且这个等差数列的差等于相邻的两个子串的index之差【在 B*******1 的大作中提到】: 求一个字符中连续出现次数最多的子串: abcbcbcabc 中,连续出现的字符串为bc,连续三次: abcccabc中,最多的为c: 要是不要求连续的话用suffix array很好弄,但是连续的,怎么弄才好呢?: 谢谢。
B*12011-11-10 08:1111 楼其实这个我也想过,但是这样子似乎复杂度很高啊,sort后找完common prefix再找等差数列。【在 m**q 的大作中提到】: 我觉得连续的子串也可以用suffix array啊: 比如 abcbcbcabc: 0123456789 : 0 abc : 9 abcbcbcbcabc: 5 bcabc: 3 bcbcabc: 1 bcbcbcabc: 9 c: 6 cabc
a*m2011-11-10 08:1112 楼长度有关系么?没限制的话找出现次数最多的字符就可以了吧?【在 B*******1 的大作中提到】: 求一个字符中连续出现次数最多的子串: abcbcbcabc 中,连续出现的字符串为bc,连续三次: abcccabc中,最多的为c: 要是不要求连续的话用suffix array很好弄,但是连续的,怎么弄才好呢?: 谢谢。