给定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个这样的字符串。
答案 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)。