Проверка палиндрома

Линейный тип данных называется палиндромом, если он читается одинаково справа налево, например, слово «анна».

Дана строка, необходимо понять, можно ли завести палиндром в случае переносов между его буквами.

Например, в случае строки «aabb» вы можете легко получить палиндром «baab». Однако в случае строки «abcda» невозможно получить палиндромный текст при любых перемещениях. Необходимо написать функцию Solution, которая получает данный тип линии, возвращает true или false, в зависимости от того, удастся ли получить палиндром из данной строки или нет.

function solution(x) {
if (x===x.split("").reverse().join("")) { // проверяет палиндром или нет
    return true 
}
for (var i = 0; i < x.length; i++) {
    //тут думаю надо поменять местами элементы и проверять заново,но как не знаю (
} } 


console.log(solution("aabb")) // true
console.log(solution("cabdefg")) // false
console.log(solution("aaabbaaa")) // true
console.log(solution("zaa")) // true

Проверял посчитать количество повторяющих элементов потом сравнить с массивом,но не получил решение ((

function solution(x) {
var k = 0
if (x===x.split("").reverse().join("")) {
    return true
}
for (var i = 0; i < x.length; i++) {
    if (x[i]==x[i+1]) {
        k++
    }
} 
console.log(k)
return k>=x.length/2?true:false } 

Ответы (1 шт):

Автор решения: HTMLProgrammer
function solution(str){
    let chars = new Set(str),
        wasOdd = false;

    for(let char of chars)
        if(str.match(new RegExp(char, 'gi')).length % 2)
            if(wasOdd)
                return false;
            else
                wasOdd = true;
    return true;
}
→ Ссылка