RT.
已知一个长字符串,比如说一篇 5000 字的文章 content ,就是说这个 content 比较长
和
一组子字符串数组 如 ["北京","上海","深圳"] 就是说 每个子字符串很短
现在想找一个时间和空间复杂度最低的算法,来判断每个子字符串是否在文章中出现过
请各位大佬给个思路.
![]() | 1 catinred 2018-08-30 18:02:11 +08:00 快要交暑假作业了吧? |
![]() | 3 orcusfox 2018-08-30 18:12:51 +08:00 via iPhone 没必要,全遍历一遍也就 O(n),优化有啥意思?要一个词出现,用 kmp。要都出现,用 BitSet 建过滤器。 |
![]() | 4 rrfeng 2018-08-30 18:13:30 +08:00 via Android 5000 字要什么性能? |
![]() | 7 GtDzx 2018-08-30 18:21:37 +08:00 有个叫 AC 自动机的东西,你可以搜一下看看 |
![]() | 9 vizee 2018-08-30 18:33:46 +08:00 关键词: 多模匹配, 字典树, 前缀树, AC 自动机, DFA, 考虑时间空间: 双数组 AC 自动机 |
10 leriou 2018-08-30 18:54:15 +08:00 DFA |
11 dongyx 2018-08-30 22:33:43 +08:00 via iPhone AC 自动机 |
![]() | 12 crayygy 2018-08-30 23:06:48 +08:00 via iPhone 曾经用 AC 解决了一个性能问题,研究一下还是不错的 |
![]() | 13 vjnjc 2018-08-30 23:52:13 +08:00 via Android 感觉用 hashmap(string, boolean)足矣。 要的还感觉不够的话用类似 bitset 的方式,想办法把 string 转 int/long,然后用 boolean 判断是否已经存在,因为你要所有字符是否出现都要存储没啥特别优秀的方法。 (外行人出点馊主意~ |
![]() | 14 ronglexie 2018-08-30 23:56:27 +08:00 Trie 树 |
![]() | 15 brucewuio 2018-09-03 15:16:47 +08:00 才 5000 字节遍历 岂不美哉 |