(アルゴリズム)Codewars:chracterFrequency


Description

Write a function that takes as its input a string and returns an array of
   arrays as shown below sorted in descending order by frequency and then by
   ascending order by character.
 
        :: Example ::
 
   characterFrequency('mississippi') ===
   [
     ['i', 4],
     ['s', 4],
     ['p', 2],
     ['m', 1]
   ]
 
        :: Example2 ::
 
   characterFrequency('miaaiaaippi') ===
   [
     ['a', 4],
     ['i', 4],
     ['p', 2],
     ['m', 1]
   ]
 
        :: Example3 ::
 
   characterFrequency('mmmaaaiiibbb') ===
   [
     ['a', 3],
     ['b', 3],
     ['i', 3],
     ['m', 3]
   ]
 
 var characterFrequency = function (string) {
    
};

問題を解く


文字列が入力されている場合は、重複する文字列の個数を表す数値と文字を配列に並べ替え、2 D配列の問題に戻ります.

に答える


これはハッシュ問題です.したがって、オブジェクトを初めて作成して配列でアクセスすると、問題を簡単に解決できます.Object.entries(obj)を使用してオブジェクトを2 Dソートします.(反対にObject.assing({}, arr))
資料を了解する
// 반복되지 않는 첫 번째 문자열 반환하기
// 해쉬
function solution(s) {
  let answer;
  let obj={};
  for (let x of s) {
    if (obj[x]) {
      obj[x] += 1;
    } else {
      obj[x] = 1;
    }
  }
  answer = Object.entries(obj).sort();
  return answer.sort((a, b) => b[1] - a[1]);
}

const s = 'mississippi';
const n = 'miaaiaaippi';
const x = 'mmmaaaiiibbb';

console.log(solution(s));
console.log(solution(n));
console.log(solution(x));

その他の質問に答える

export default function characterFrequency (string) {

  let convertToObj = string
    .split("")
    .sort()
    .reduce((all, one) => {
      if (one in all) {
        all[one]++
      } else {
        all[one] = 1;
      }
      return all
    }, {});

  let converToArray = [];
  
  for(let key in convertToObj) {
    converToArray.push([key, convertToObj[key]])
  }

  converToArray.sort((a, b) => {
    return b[1] - a[1]
  });
  return converToArray;
};
本当に柔軟に問題を解決し,reduceは本当に複雑なアルゴリズム式を簡潔にまとめた.accロビンオブジェクトを宣言し、oneとして表されるbellクラスのすべてのキー値にif文でbellクラスを増減する方法が使用されます.
次に、オブジェクトで、ソートのために空の配列を再宣言し、キー値を遍歴し、キー値に対応するbellクラスを割り当てます.
JavaScriptの柔軟性は、2層配列の要素にアクセスする際に非常に優れています.return b[1] - a[1]は、このようにコードを簡潔に整理することができる.