Просто, чтобы упростить вещи, я сделал это функционально. Также может помочь явное преобразование в массив [...str]
.
function longestCommonPrefixOfPair(strA, strB) {
if (strA.length === 0 || strB.length === 0) return '';
if (strA.length > strB.length) return longestCommonPrefix(strB, strA);
const pairs = toChars(strA).map((a, i) => [a, strB[i]]);
const prefixLength = pairs.findIndex(([a, b]) => a !== b);
return prefixLength >= 0 ? strA.slice(0, prefixLength) : strA;
}
function toChars(str) {
return [...str];
}
const longestCommonPrefix = (strs) => strs.reduce(longestCommonPrefixOfPair);
console.log(["123456", "12345", "123456789", "123"].reduce(longestCommonPrefix)); // 123