Ссылка на вызов codewars
Мне нужно вернуть длину самого длинного префикса, который также является суффиксом строки в Javascript.
Насколько я понимаю, префиксы в "abcd"
:
['a', 'ab', 'abc']
И суффиксы в "abcd"
:
[ 'bcd', 'cd', 'd' ]
Таким образом, длина самого длинного префикса, который также является суффиксом в "abcd"
, в этом случае равна 0, потому что нет префиксов, которые также являются суффиксами в "abcd"
.
До сих пор я мог выяснить, как получить суффиксы в массив для сравнения, но не префиксы.
function returnLongestPrefixAndSuffix(string) {
let prefixes = [];
let suffixes = [];
for (let i = 0; i < string.length -1; i++) {
prefixes.push(string.slice(i));
}
for (let i = 1; i < string.length; i++) {
suffixes.push(string.slice(i));
}
return prefixes + " " + suffixes;
}
console.log(returnLongestPrefixAndSuffix("abcd"));
Я не понимаю, как начинать с начала строки и добавлять каждый элемент в массив каждый раз на один символ, исключая элемент, который будет включать последний.
Пожалуйста, следуйте моей текущей логике, если это возможно.
РЕДАКТИРОВАТЬ : Мой код теперь выглядит так:
function solve(string) {
let prefixes = [];
let suffixes = [];
let includedList = [];
for (let i = 1; i < string.length; i++) {
prefixes.push(string.slice(0, i));
}
for (let i = 1; i < string.length; i++) {
suffixes.push(string.slice(-i));
}
console.log(prefixes);
console.log(suffixes);
for (let i = 0; i < prefixes.length; i++) {
let element = prefixes[i];
if (suffixes.includes(element) === true) {
includedList.push(element);
}
}
console.log(includedList);
if (includedList.length === 0) {
return 0;
}
else {
let overlap = prefixes.filter(value => suffixes.includes(value));
console.log(overlap);
let longest = includedList.sort(function (a, b) { return b.length - a.length; })[0];
return longest.length;
}
}
console.log(solve("abcdabc"));
И это проходит тест 10049, но не проходит 163 теста на кодовых войнах. Я до сих пор не знаю, что делать с переменной overlap
или как исключить перекрытия из массива includedList
.