【发布时间】:2013-03-01 06:09:43
【问题描述】:
假设您有一个包含以下字符串的文件
a a a b a a b a a b b a b
您无法访问该文件,但可以访问一个函数 FetchNextChar(),它一次提供一个字符。
要匹配的模式是a a b
您如何计算点击总数?
这就是我的想法。
- 如果提取的字符是模式 ('a') 的第一个字符,则将其添加到队列中
- 如果下一个字符与模式的下一个字符匹配,则开始为下一个字符添加/创建一个链表
所以在第一次获取之后我们有
Pattern -a
Queue - a
Then
Pattern -a a
Queue[0] a->a
Queue[1] a
3rd
Pattern a a b
Queue[0] a -->a--> a //doesn't match, dequeue
Queue[1] a-> a
Queue[2] a
我认为这可行,但我看到的问题是,如果有多个字符与模式的第一个字符匹配,我会继续添加到队列中,因此继续增加列表。
有什么想法吗?
【问题讨论】:
-
为什么不用KMP算法?
-
@Imposter 如果你想提及它,请做link to an algorithm。
-
这是一个已解决的问题。请参阅 Gusfield 1997。从实用的角度来看,最好使用的算法是 Boyer-Moore 算法。
-
有什么好的 DS 可以有效地存储文件中的文本并滑动窗口?理想情况下,我们只想将模式的长度存储在缓冲区中以进行比较。
-
您希望只匹配
aab,还是只是一个示例,并且您想知道一种通用算法来计算文本流中任何字符串的出现次数?
标签: string algorithm pattern-matching trie