我正在尝试制作一个程序,将一个单词数组排序成最长可能的“链”(每个单词以前一个单词结尾字母开头)。一个例子是Utah-->Hawaii-->Idaho-->Oregon。
我已经试了大约2个小时来解决这个问题。我使用的方法是暴力破解,尝试生成所有可能的链,然后找到最长的那一条。我遇到的问题是在寻找链时如何避免进入循环中。 我尝试搜索是否StackOverflow上已经回答了这个问题,并且我确实找到了一个关于这个问题的已回答的问题,但它是用Python编写的,当我在大型列表上测试接受的解决方案时,它失败了。
这是基本思路:
var words = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];
function longestChain(wordArray) {
var allChains = [];
for(var x = 0; x < words.length; x++) {
/* I'm completely lost here
store all chains generated with this start in the allChains array
each chain should be an array
example: ["Utah","Hawaii","Idaho","Oregon","New York","Kentucky"]
*/
}
var max = [0,0];
for(var x = 0; x < allChains.length; x++) {
if(allChains[x].length > max[0]) {
max[0] = allChains[x].length;
max[1] = x;
}
}
return allChains[max[1]];
}
所以基本上我需要一种不用循环就可以找到所有可能链的方法。