JavaScriptで文字列を等しい長さの部分文字列に分割する方法
文字列と数値 n を2つの引数として受け取るJavaScript関数を作成する必要があります(数値nは文字列の長さをちょうど割り切れる値である必要があります)。そして、等しい長さのn個の文字列からなる配列を返します。
例
例えば、次のようなケースを考えてみましょう。
文字列が「helloo」、数値が3の場合 出力は次のようになります: ["ho", "eo", "ll"]
ここで、各部分文字列は文字列の長さをnで割った文字数を正確に含みます。また、各部分文字列は、元の文字列の先頭と末尾の文字を交互に取り出すことで形成される点が特徴です。
それでは、この関数のコードを書いてみましょう。
コード例
const str = 'helloo';
const splitEqual = (str, n) => {
if(str.length % n !== 0){
return false;
}
const len = str.length / n;
const strArray = str.split("");
const arr = [];
let i = 0, char;
while(strArray.length){
if(i % 2 === 0){
char = strArray.shift();
}else{
char = strArray.pop();
};
if(i % len === 0){
arr[i / len] = char;
}else{
arr[Math.floor(i / len)] += char;
};
i++;
};
return arr;
};
console.log(splitEqual(str, 3));コードの解説
この関数の処理の流れは以下のとおりです。
- まず、文字列の長さがnで割り切れない場合はfalseを返して処理を終了します。
- 1つの部分文字列の長さ(len)を、文字列の長さをnで割ることで求めます。
- 文字列をsplit("")で1文字ずつの配列に変換します。
- whileループの中で、カウンターiが偶数の場合は配列の先頭(shift)、奇数の場合は末尾(pop)から文字を取り出します。これにより、先頭と末尾の文字が交互に取得されます。
- 取り出した文字は、iをlenで割った位置に対応する配列要素に順に追加されていきます。
出力
コンソールへの出力結果は次のとおりです。
[ 'ho', 'eo', 'll' ]
このように、元の文字列「helloo」の先頭と末尾から交互に文字を取り出すことで、等しい長さの3つの部分文字列からなる配列が生成されました。
-
JavaScriptで文字列をできるだけ多くの部分に分割するアルゴリズム
文字列処理のアルゴリズム問題としてよく知られている「Partition Labels」をJavaScriptで解いてみましょう。この記事では、各文字が1つの部分にしか現れないように、文字列をできるだけ多くの部分へ分割する方法を解説します。 問題の定義 まず、文字列 str を引数として受け取るJavaScript関数を作成します。この関数の目的は、以下の条件を満たすように文字列を可能な限り多くの部分に分割することです。 各文字(英字)は、最大でも1つの部分にしか出現しない 戻り値は、各部分の長さを表す整数の配列 例を見てみましょう。 入力: const str = ababcbacade
-
Pythonで文字列を均等な長さに分割する方法【itertools活用】
このチュートリアルでは、指定した文字列を均等な長さの部分文字列に分割するプログラムを作成します。まず、具体的な例を見てみましょう。 入力例 string = Tutorialspoint each_part_length = 5 出力例 Tutor ialsp ointX 文字列の長さが各部分の長さで割り切れない場合、余った部分はfillvalueで指定した文字(ここでは「X」)で埋められます。 入力例 string = Tutorialspoint each_part_length = 6 出力例 Tutori alspoi ntXXXX この結果を実現するために、itertoolsモジュー