【发布时间】:2015-05-17 21:39:13
【问题描述】:
最近在翻一些面试题,发现了一个很有意思的:
给你一个单词列表。找出两个单词是否可以连接在一起形成回文。例如,考虑一个列表 {bat, tab, cat} 然后 bat 和 tab 可以连接起来形成一个回文。 期待一个 O(nk) 解决方案,其中 n = 作品数,k 是长度
可以有多对,找到一个就返回true。
此外,在 cmets 中,其中一种方法是:
1) 将第一个单词添加到 trie (A B)
2) 取第二个单词 (D E E D B A) 并反转 (A B D E E D)
3) 看看你可以在 trie 中匹配多少个反转单词中的字母(前 2 个)
4) 取出字符串的其余部分 (D E E D),看看它是否是回文,如果是,则返回 true
5) 将第二个单词添加到 trie (D E E D B A)
6) 使用下一个单词返回第 2 步
7) 用完的话返回false
但在我看来,这不是 O(nk) 的解决方案。
任何人都可以提出解决方案吗?或者解释一下为什么上面描述的算法是O(nk)??
【问题讨论】:
-
k是什么长度?所有单词的长度都一样吗? -
k 是最长单词的长度。
-
你真的要代码还是算法?去实现完整的 c++ 是相当多的。
-
不,只是算法,步骤
-
那么为什么要用
c++标记它呢?
标签: c++ algorithm search palindrome