JavaScriptで文字の出現頻度に基づいて文字列をエンコードする方法
問題
文字列 str を唯一の引数として受け取る JavaScript 関数を作成する必要があります。
この関数は、入力文字列をもとに新しい文字列を生成します。元の文字列の中でその文字が1回だけ出現する場合には「(」を、2回以上出現する場合には「)」を、対応する位置に割り当てます。
なお、大文字と小文字の違いは無視して判定します。
例えば、関数への入力が次の場合 −
入力
const str = 'Success';
出力
const output = ')())())';
考え方
入力文字列「Success」を大文字小文字を区別せずに見ると、「s」は3回、「u」は1回、「c」は2回、「e」は1回出現しています。したがって、「s」と「c」に対応する位置には「)」、「u」と「e」に対応する位置には「(」が割り当てられ、結果は「)())())」となります。
コード例
以下がこの問題を解くコードです −
const str = 'Success';
const mapString = (str = '') => {
const mainStr = str.toLowerCase();
const hash = {};
let res = '';
for (let char of mainStr) {
hash[char] = ~~hash[char] + 1;
}
for (let char of mainStr) {
if (hash[char] > 1) {
res += ')';
} else {
res += '(';
}
}
return res;
};
console.log(mapString(str));コードの解説
処理の流れは次のとおりです。
まず str.toLowerCase() によって文字列をすべて小文字に変換し、大文字小文字の違いを吸収します。
次に、空のオブジェクト hash を用意して各文字の出現回数を記録します。~~hash[char] というビット演算を使うことで、未定義の値(undefined)を 0 として扱え、簡潔にカウントアップできます。
最後に、もう一度文字列を先頭から走査し、出現回数が1より大きい文字には「)」、それ以外の文字には「(」を順に連結していき、結果の文字列を組み立てて返します。
出力
コンソールには以下のように表示されます −
)())())
-
MySQLで特定の文字を基準に文字列の一部を抽出する方法
MySQLでは、SUBSTRING_INDEX関数を使用することで、特定の区切り文字を基準に文字列の一部を簡単に抽出できます。この記事では、「/」で区切られたコード文字列から、3番目の要素を取り出す方法を、テーブル作成から実行結果まで具体的な例とともに解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable -> ( -> Code varchar(100) &nbs
-
Pythonで文字列内の各文字の出現頻度を数える3つの方法
テキスト処理は、機械学習やAIの分野において重要なテーマの一つとなっています。Pythonにはこの分野を支える便利なツールやライブラリが数多く用意されており、文字列の解析も簡単に行えます。本記事では、与えられた文字列に含まれる各文字の出現回数(頻度)を求める方法を、複数のアプローチから解説します。 方法1: collections.Counterを使う 標準ライブラリcollectionsのCounterクラスは、イテラブルなオブジェクト内の各要素の出現回数を自動的に集計してくれるクラスです。文字列をそのまま渡すだけで、各文字の頻度を持つ辞書風オブジェクトが得られるため、最もシンプルで推奨さ