# Find all pairs of unique indices in a list such that the concatenation of the two words is a palindrome

Given a list of words, find all pairs of unique indices such that the concatenation of the two words is a palindrome.

For example, given the list ["code", "edoc", "da", "d"], return [(0, 1), (1, 0), (2, 3)].

const lst = ["code", "edoc", "da", "d"];


My functional solution

const findPalindromePairs = lst => {
const isPalindrome = str => str === [...str].reverse().join("");
return lst.reduce((pairs, w1, i) => {
return [...pairs, ...lst.reduce((match, w2, j) => {
if (i !== j && isPalindrome(${w1}${w2})) { match.push([i,j]); }
return match;
}, [])];
}, []);
};

console.log(findPalindromePairs(lst));


My imperative solution

function findPalindromePairs2 (lst) {
const len = lst.length;
const pairs = [];

const isPalindrome = str => str === [...str].reverse().join("");
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (i !== j && isPalindrome(lst[i] + lst[j])) { pairs.push([i,j]); }
}
}
return pairs;
}

console.log(findPalindromePairs2(lst));


The only suggestion I have is for readability, the name match in the functional solution might be slightly confusing for anyone reading the code. Perhaps a more appropriate name would be something like subMatches.