配对字符串形成回文

时间:2015-04-10 12:38:46

标签: algorithm

给定N个字符串,每个字符串的最大长度为1000。我们可以按端点连接一对字符串。如果一个是“abc”而另一个是“cba”,那么我们可以获得“abccba”以及“cbaabc”。某些字符串可能没有连接到任何其他字符串。也没有字符串可以连接到自身。

我们只能连接形成回文的那两个字符串。因此,我需要告知制作此类配对后留下的最小字符串数。

示例:我们有9个字符串:

aabbaabb 
bbaabbaa
aa
bb
a
bbaa
bba
bab
ab

然后这里的回答是5

解释:这是5个字符串:

"aabbaabb" + "bbaabbaa" = "aabbaabbbbaabbaa"
"aa" + "a = "aaa"
"bba" + "bb" = "bbabb"
"bab" + "ab" = "babab"
"bbaa"

此外,总共可以有1000个这样的字符串。

1 个答案:

答案 0 :(得分:3)

1)制作一个图表,其中每个单词都有一个节点。

2)仔细阅读所有单词对,如果我们将它们连接起来,检查它们是否形成了回文结构。如果他们确实将图中的相应节点与边缘连接起来。

3)现在使用匹配算法查找可以匹配的最大边数:http://en.wikipedia.org/wiki/Blossom_algorithm

时间复杂度:点1的O(N),点2的O(n * n * 1000)和点3的O(V ^ 4),总复杂度为O(n ^ 4)。