JavaScriptで文が「スムーズ」かどうかを判定する関数の実装方法
本記事では、与えられた文が「スムーズ(smooth)」であるかどうかを判定するJavaScript関数の実装方法を解説します。
スムーズな文とは?
「スムーズな文」とは、文中の各単語の最初の文字が、直前の単語の最後の文字と一致している文のことです。例えば「this stringt tries sto obe esmooth」のような文は、単語同士が文字でつながっているためスムーズとみなされます。一方、「this string is not smooth」のように単語のつながりが途切れている文はスムーズではありません。
それでは、この判定を行う関数のコードを見ていきましょう。
実装コード
const str = 'this stringt tries sto obe esmooth';
const str2 = 'this string is not smooth';
const isSmooth = str => {
const strArr = str.split(' ');
for(let i = 0; i < strArr.length; i++){
if(!strArr[i+1] || strArr[i][strArr[i].length -1] === strArr[i+1][0]){
continue;
};
return false;
};
return true;
};
console.log(isSmooth(str));
console.log(isSmooth(str2));
コードの解説
この関数の仕組みを順を追って確認します。
- 文を単語に分割:
split(' ')メソッドを使い、文をスペースで区切って単語の配列に変換します。 - 隣接する単語を比較:
forループで各単語を順に走査し、現在の単語の最後の文字(strArr[i][strArr[i].length - 1])と次の単語の最初の文字(strArr[i+1][0])を比較します。 - ループの継続条件: 次の単語が存在しない場合(文の終端に達した場合)、または両者の文字が一致している場合は
continueで次の反復へ進みます。 - 不一致の検出: 一致しない組み合わせが見つかった時点で、その文はスムーズではないため
falseを即座に返します。 - 最終判定: すべての単語をチェックして問題がなければ、文はスムーズであるとして
trueを返します。
実行結果
コンソールには次のように出力されます。
true false
1つ目の文字列「this stringt tries sto obe esmooth」はすべての単語が正しくつながっているためtrue、2つ目の文字列「this string is not smooth」は「string」と「is」のつながりが途切れているためfalseと判定されています。
まとめ
このように、split()で文を単語配列に変換し、隣接する単語の文字を比較するだけで、スムーズな文かどうかを簡単に判定できます。文字列操作と配列の走査を組み合わせた、シンプルながら実践的なアルゴリズムの例と言えるでしょう。
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptで2つの区間配列の共通部分を求める方法【2ポインタ法】
問題概要本記事では、2つの区間(インターバル)配列を受け取り、その共通部分を返すJavaScript関数を実装します。入力となる配列 arr1 と arr2 には以下の前提があります。各区間は互いに重なり合わない(pairwise disjoint)各区間はソートされた順序で格納されている閉区間 [a, b](a ≤ b)は、a ≤ x ≤ b を満たす実数 x の集合を表します。また、2つの閉区間の共通部分(積集合)は、空集合になるか、あるいは1つの閉区間として表現できます。例えば、[1, 3] と [2, 4] の共通部分は [2, 3] です。入力例const arr1 = [[0,2]