Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function longest_palindrome(s) {
- const palindromes = new Set();
- const finishedPalindromes = [];
- const getLength = (i, c, isEven) => (i - c) * 2 + (isEven ? 0 : 1);
- const getPaired = (i, c, isEven) => i - (i - c) * 2 + (isEven ? 1 : 0);
- for (let i = 0; i < s.length + 1; i++) {
- for (const p of palindromes) {
- const {isEven, center} = p;
- const probLength = getLength(i, center, isEven);
- if (i >= s.length || s[getPaired(i, center, isEven)] !== s[i]) {
- const length = probLength - 2;
- palindromes.delete(p);
- finishedPalindromes.push({...p, length, text: s.slice(getPaired(i - 1, center, isEven), i) })
- }
- }
- if (i >= s.length) {
- continue;
- }
- if (s[i + 1] === s[i - 1]) {
- palindromes.add({isEven: false, center: i});
- }
- if (s[i] === s[i - 1]) {
- palindromes.add({isEven: true, center: i - 1});
- }
- }
- let longest = s.length === 0 ?
- {center: 0, length: 0, isEven: true, text: ''} :
- {center: 0, length: 1, isEven: false, text: s[0]};
- for (const p of finishedPalindromes) {
- if (p.length > longest.length) {
- longest = p;
- }
- }
- return longest.text;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement