программа массива анаграмм и результаты группы массивов - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу оптимизировать программу ниже, используя язык программирования node js, может кто-нибудь помочь мне в этом.Я попробовал данный код, но я хочу оптимизировать больше

function anagramsArray() {
let arr = ["cab", "cz", "abc", "bca", "zc"];
let result = []
for(let i=0; i<arr.length; i++) {
  let iSortedValue = sortString(arr[i])
  let innerResult = []
  innerResult.push(arr[i])
  for(let j=i+1; j<arr.length; j++) {
    let jSortedValue = sortString(arr[j])
    if(iSortedValue.length == jSortedValue.length && jSortedValue == jSortedValue) {
      innerResult.push(arr[j])
      arr.splice(j,1)
      j--
    }
  }
  result.push(innerResult)
}
  return result
}

console.log(anagramsArray())

function sortString(reqV) {
  let reqValue = reqV.split("")
  for(let i=0; i<reqValue.length; i++) {
    for(let j=i; j<reqValue.length; j++) {
      if(reqValue[i] > reqValue[j]) {
        let temp = reqValue[i]
        reqValue[i] = reqValue[j]
        reqValue[j] = temp
      }
    }
  }
  return reqValue.join("")
}

Результат :: [["abc", "bca", "cab"], ["zc", cz "]]

1 Ответ

1 голос
/ 29 апреля 2019

Прежде всего, ваша функция sortString может быть «упрощена» до следующего:

function sortString(str) {
    return Array.from(str) // Converts string to array of characters
        .sort() // Sorts them
        .join(''); // Creates string again
}

Фактическая логика группировки анаграмм может фактически выполняться несколькими способами.То, что вы уже сделали, также допустимо, но это код в стиле «C».Ниже приведен один из таких способов использования доступных функций JS:

function anagramsArray() {
    let arr = ["cab", "cz", "abc", "bca", "zc"];

    // Following reduction creates a Map from 'sorted string' to list of 
    // strings that result in same sorted string. i.e. list of anagrams
    const resultObj = arr.reduce((accumulator, str) => {
        const sortedStr = sortString(str);
        if(!accumulator[sortedStr]) {
            accumulator[sortedStr] = [];
        }
        accumulator[sortedStr].push(str);
        return accumulator;
    }, {});

    // Following mapping discards the keys in object above,
    // and returns the Array of arrays that the user expects.
    return Object.keys(resultObj).map(key => resultObj[key]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...