有没有这样一种算法,字符串中寻找出现频率最高的子串,100分送上

joyhen 2013-03-29 10:37:38
假如有字符串:ABCDABCBCBACBCA,用图说明:

1.对于单字符(char)先不考虑(比如A,B,C,D);
2.如何找出最大长度的重复(字符串出现的次数大于1)子串,比如图中的(ABC出现了2次)
3.如何找出重复次数最多的子串,比如图中的BC。

最好是C#语言实现,算法尽量精炼
...全文
382 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2013-04-02
  • 打赏
  • 举报
回复
引用 7 楼 Joyhen 的回复:
引用 1 楼 FancyMouse 的回复:如果要最快的方法的话,你需要一个叫后缀树的数据结构。一般情况O(nlogn),固定字典大小则O(n)。 不管速度的话,把n个前缀子串放在一起构造字典树然后统计频度就可以了。O(n^2) 谢谢,看了下后缀树的资料,应该是这种算法,不过我还没找到,c#将字符串快速生成后缀树的算法,后面的匹配就无法进行了
要现成代码的话我帮不上忙。你要说你在实现后缀树过程中哪一步搞不懂我倒是可以看一下。
joyhen 2013-04-02
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
如果要最快的方法的话,你需要一个叫后缀树的数据结构。一般情况O(nlogn),固定字典大小则O(n)。 不管速度的话,把n个前缀子串放在一起构造字典树然后统计频度就可以了。O(n^2)
谢谢,看了下后缀树的资料,应该是这种算法,不过我还没找到,c#将字符串快速生成后缀树的算法,后面的匹配就无法进行了
joyhen 2013-04-02
  • 打赏
  • 举报
回复
引用 5 楼 melc110 的回复:
统计每个单字符出现的次数,并且记录每次出现的索引,然后,从次数最多的开始统计,比如B出现5次A出现4次,然后根据A和B的索引,判断AB是否是连续串,瞎想的
这样子不行的,完全树形枚举了。
liqi 2013-04-02
  • 打赏
  • 举报
回复
统计每个单字符出现的次数,并且记录每次出现的索引,然后,从次数最多的开始统计,比如B出现5次A出现4次,然后根据A和B的索引,判断AB是否是连续串,瞎想的
wkellypro 2013-04-02
  • 打赏
  • 举报
回复
trie 树
joyhen 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
如果要最快的方法的话,你需要一个叫后缀树的数据结构。一般情况O(nlogn),固定字典大小则O(n)。 不管速度的话,把n个前缀子串放在一起构造字典树然后统计频度就可以了。O(n^2)
大手,能否通俗一点。再次感谢
FancyMouse 2013-03-29
  • 打赏
  • 举报
回复
如果要最快的方法的话,你需要一个叫后缀树的数据结构。一般情况O(nlogn),固定字典大小则O(n)。 不管速度的话,把n个前缀子串放在一起构造字典树然后统计频度就可以了。O(n^2)
Hony杨 2013-03-29
  • 打赏
  • 举报
回复
最长重复子串:KMP或者后缀数组,已经有模板了,自己搜一下嘛! 最多重复子串:将原串a[]分拆为n-1个形如a[i,...(n-1)]的子串(0<=i<n-1)来构造字典树,然后统计结点频率。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧