Что состоит в том, чтобы сказать простой способ, является ли список слов анаграммами друг друга?

Другим способом может быть

let a = [1,2,3,4,7,8,12,15,21,21,22,23]

let r = a.reduce((acc, val) => {
  const lastGroup = acc.pop() || [];
  const lastValue = lastGroup.slice(-1)[0];
  if (val - lastValue > 1) {
    return [...acc, lastGroup, [val]];    
  }
  return [...acc, [...lastGroup, val]];
}, []).map(group => {
  const first = group[0];
  const last = group[group.length-1];
  return first !== last ? `${first}-${last}` : `${first}`;
});

console.log(r)

7
задан Eric Leschinski 30 July 2013 в 20:37
поделиться

7 ответов

Поместите все буквы в алфавитном порядке в строку (сортирующий алгоритм) и затем сравните получившую строку.

- Adam

22
ответ дан 6 December 2019 в 04:54
поделиться

Вид каждый элемент (удаляющий пробел) и выдерживает сравнение с предыдущим. Если они являются всеми одинаковыми, они - все анаграммы.

6
ответ дан 6 December 2019 в 04:54
поделиться

Хорошая вещь все мы живем в действительности C# оперативной сортировки коротких слов на четырехъядерных машинах с oozles памяти.:-)

Однако, если Вы, оказывается, ограниченная память и не можете коснуться исходных данных, и Вы знаете, что те слова содержат символы от более низкой половины таблицы ASCII, Вы могли пойти для другого алгоритма, который считает возникновение каждой буквы в каждом слове вместо сортировки.

Вы могли также выбрать тот алгоритм, если Вы хотите сделать это в O (N) и не заботитесь об использовании памяти (счетчик для каждого символа Unicode может быть довольно дорогим).

10
ответ дан 6 December 2019 в 04:54
поделиться

Интересно достаточно Невероятные Приключения Eric Lippert В Кодировании Блога имели дело с вариацией на эту самую проблему 4 февраля 2009 в этом сообщении.

3
ответ дан 6 December 2019 в 04:54
поделиться

Следующий алгоритм должен работать:

  1. Отсортируйте буквы в каждом слове.

  2. Отсортируйте отсортированные списки букв в каждом списке.

  3. Сравните каждый элемент в каждом списке для равенства.

2
ответ дан 6 December 2019 в 04:54
поделиться

Отсортируйте буквы и сравните (побуквенный, строка выдерживают сравнение...) первые вещи, который приходит на ум.

1
ответ дан 6 December 2019 в 04:54
поделиться
  1. сравните длину (если не равный, не шанс)
  2. сделайте немного вектора из длины строк
  3. для каждого char в первой строке находят случаи его во втором
  4. установите бит для первого возникновения сброса
  5. если можно найти одну остановку со сбоем
0
ответ дан 6 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: