(words)
| 1 | // Time O(n*m) - where n is the number of words and m the length of the longest word |
| 2 | // Space O(n*m) |
| 3 | function semordnilap(words) { |
| 4 | if (words.length === 0) return []; |
| 5 | const wordsSet = new Set(words); |
| 6 | const semordnilapPairs = []; |
| 7 | |
| 8 | for (const word of words) { |
| 9 | const reverse = word.split("").reverse().join(""); |
| 10 | if (wordsSet.has(reverse) && reverse !== word) { |
| 11 | semordnilapPairs.push([word, reverse]); |
| 12 | wordsSet.delete(word); |
| 13 | wordsSet.delete(reverse); |
| 14 | } |
| 15 | } |
| 16 | |
| 17 | return semordnilapPairs; |
| 18 | } |