JavaScriptで文字列内の最長連続文字とその出現回数を検索する方法
問題
文字列を受け取り、その中で最も長く連続して現れる文字とその連続回数を返すJavaScript関数を作成する必要があります。戻り値は必ず2つの要素を持つ配列とします。
- 1つ目の要素:文字列内で最も多く連続して登場する文字
- 2つ目の要素:その文字が連続して登場した回数
解決のアプローチ
この問題は、文字列を先頭から1文字ずつ走査し、隣接する文字同士を比較することで解決できます。同じ文字が続いている間はカウントを増やし、異なる文字が出現した時点でカウントをリセットします。その際、これまでに記録した最大連続回数を上回っていれば、その文字と回数を結果として保存していきます。
コード例
以下が実際のコードです。
const str = 'tdfdffddffsdsfffffsdsdsddddd';
const findConsecutiveCount = (str = '') => {
let res='';
let count=1;
let arr = []
for (let i=0;i<str.length;i++){
if (str[i]===str[i+1]){
count++
} else {
if (arr.every(v=>v<count)){
res=str[i]+count
}
arr.push(count)
count=1
}
}
return !res?['',0]:[res.slice(0,1),res.slice(1)*1];
};
console.log(findConsecutiveCount(str));コードの解説
- 変数 count で現在の連続回数を追跡し、初期値は1に設定します。
- ループ内で str[i] と次の文字 str[i+1] を比較し、一致していれば count をインクリメントします。
- 不一致の場合、これまで記録済みの連続回数(配列 arr)よりも大きいときだけ、その文字と回数を res に上書き保存します。
- 最後に res を分解し、[文字, 回数] の形式の配列として返します。該当する文字が存在しない場合は空文字と0を返します。
出力
コンソールには以下のように出力されます。
['f', 5]
この入力文字列では「f」が5回連続して登場する部分が最長であるため、結果は ['f', 5] となります。同率の連続が複数ある場合は、先に出現した方が優先される点にも注目してください。
-
JavaScriptでアルファベットの1始まりのインデックスを取得する方法
問題JavaScriptで関数を作成する必要があります。この関数は、小文字の英字アルファベット1文字を受け取り、その文字がアルファベットの中で何番目に位置するかを「1始まり」のインデックスとして返します。例えば、a なら 1、j なら 10 を返すといったイメージです。無効な入力が渡された場合は -1 を返してエラーを通知すると親切です。実装の考え方最もシンプルな方法は、先頭に半角スペースを付けたアルファベット文字列「 abcdefghijklmnopqrstuvwxyz」を基準(レジェンド)として用意することです。こうすることで、スペースが0番目となり、a は1番目、j は10番目というよう
-
JavaScriptで配列のネストされた集合の最長の長さを見つけて返す方法
問題数値の配列 arr を第一引数(かつ唯一の引数)として受け取るJavaScript関数を作成する必要があります。長さ N の配列 arr には、0 から N-1 までのすべての整数がちょうど1回ずつ含まれています。この関数では、次のルールに従って構成される集合 S の最長の長さを見つけ、その結果を返す必要があります。ここで、S[i] = {A[i], A[A[i]], A[A[A[i]]], ...} と定義されます。具体的には、S の最初の要素としてインデックス i の要素 A[i] を選択することから始め、次の要素は A[A[i]]、その次は A[A[A[i]]]… というように順に辿