最长单词
给定一组单词 words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。
- 输入: [“cat”,”banana”,”dog”,”nana”,”walk”,”walker”,”dogwalker”]
输出: “dogwalker”
解释: “dogwalker”可由”dog”和”walker”组成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| var longestWord = function(words) { words.sort((a, b) => { if (!(a.length - b.length)) { return a < b ? 1 : -1 } return a.length - b.length; }); const m = new Map(); words.forEach(item => { const v = m.has(item[0]) ? m.get(item[0]) : []; v.push(item); m.set(item[0], v); }) for (let i = words.length - 1; i >= 0; i--) { const v = m.get(words[i][0]); v.splice(v.indexOf(words[i]), 1); m.set(words[i][0], v); if (dfs(words[i])) { return words[i] } } return ''; function dfs(v) { if (!v) { return true; } if (!m.has(v[0])) { return false; } for (let item of m.get(v[0])) { const n = item.length; if (v.slice(0, n) === item) { if(dfs(v.slice(n))){ return true; } } } return false; } };
|