给定一个字符串 s 和array 一个单词,使用 a 中的单词拆分 s ,以便留下最少的字符而不与任何单词匹配。
所以给定s = 'aabbac'
和a = {'aabb', 'c', 'aab', 'bac'}
我希望 s 被分成 aab | bac 而不是 aabb | a | c ,因为最后一个选项为我提供了额外的字符
有没有比使用动态编程和哈希的 O(| s | * | a |)更快的解决方案?
答案 0 :(得分:0)
在我看来,最佳处理包括从左到右扫描s,使用trie跟踪a中的匹配单词,在矢量或类似物中保留部分解,同时指示它们当前是否通过匹配在中途trie的某些部分,或者正在等待开始新的匹配,以及到目前为止匹配的累积计数。当找到替代匹配/终止时,您必须扩展向量,并且可以"压缩"所有条目都没有与任意选择匹配,并具有(相等的)最高累积计数。我没有看到任何用于哈希的用法 - 这意味着比trie慢得多 - 提取和测试候选词而不清楚你是否已经"内部"部分匹配。