Сравните две строки и посчитайте разные буквы - PullRequest
2 голосов
/ 06 ноября 2019

Мне нужно написать функцию, которая принимает две строки и сравнивает их, а затем возвращает количество букв в разных строках. Например, «ABC» и «DEC» должны возвращать 4. Моя функция всегда показывает одно короткое замыкание из-за того, как я их сравниваю. Я посмотрел, но не могу найти решение.

Я попытался перебрать строку без разбиения и закончил с той же проблемой.

function makeAnagram(a, b) {
    let result = 0;

    let a1 = a.split("").sort();
    let b1 = b.split("").sort();
    for(let i = 0; i < b1.length; i++){
        if(a1.indexOf(b1[i] < 0)){
            result += 1;
        }
    }


    return result;
 }

Ответы [ 4 ]

3 голосов
/ 06 ноября 2019

В одной строке:

("ABC"+"DEC").split('').sort().join('').replace(/(.)\1+/g, "").length

Возвращает

4

Шаги программы:

  1. ("ABC"+"DEC") делает строку с2 слитых слова: ABCDEC

  2. ("ABC"+"DEC").split('').sort().join('') позволяет отсортировать символы в строке: ABCCDE. Это позволит нам легко находить дубликаты с помощью регулярных выражений

  3. replace(/(.)\1+/g, "") удаляет все последовательности из 2+ символов, тогда мы получим ABDE

  4. .length подсчитывает оставшиеся символы, которые являются единичными.

3 голосов
/ 06 ноября 2019

Вы можете сделать:

Отредактировано как предложение @ freefaller

const makeAnagram = (a, b) => {
  const arr1 = a.split('')
  const arr2 = b.split('')
  const diff1 = arr1.filter(letter => !arr2.includes(letter))
  const diff2 = arr2.filter(letter => !arr1.includes(letter))
  
  return diff1.length + diff2.length
}

console.log(makeAnagram('ABC', 'DEC'))
2 голосов
/ 06 ноября 2019

ES6 способ сделать то же самое

const makeAnagram = (a, b) => new Set(a + b).size - new Set([...a].filter(x => b.includes(x))).size;
console.log(makeAnagram('ABC', 'DEC')); // prints 4
1 голос
/ 06 ноября 2019

Это то, что я бы сделал

Реализация

let makeAnagram = (a,b) => {
  let clubStr = ('' + a).concat(b);
  let sortedStr = clubStr.trim().split('').sort().join('');
  let uncommonStr = sortedStr.replace(/(\w)\1+/gi, '');
  return uncommonStr.length;
};

Вы можете сделать то же самое в одном вкладыше .

Звонящий: makeAnagram('ABC', 'DCE')

Выход: 4

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