JavaScriptでの表現力豊かな言葉の問題事例
「こんにちは」->「heeellooo」、「hi」->「hiiii」など、余分な感情を表すために文字を繰り返すことがあります。 「heeellooo」のようなこれらの文字列には、すべて同じである隣接する文字のグループがあります:「h」、「eee」、「ll」、「ooo」。
ある特定の文字列Sについて、次の拡張操作の任意の数のアプリケーションによってSと等しくなるようにできる場合、クエリワードは伸縮性があります。文字cで構成されるグループを選択し、グループにいくつかの文字cを追加します。グループのサイズが3以上になるようにします。
たとえば、「hello」から始めて、グループ「o」を拡張して「hellooo」を取得することはできますが、グループ「oo」のサイズが3未満であるため、「helloo」を取得することはできません。 「helllllooo」を取得するための「ll」->「lllll」のような別の拡張子。 S ="helllllooo"の場合、クエリワード "hello"は、次の2つの拡張操作のために伸縮性があります。query="hello" −> "hellooo" −> "helllllooo"=S。
クエリワードのリストを指定すると、伸縮性のあるワードの数を返す必要があります。
例-
入力文字列が-
の場合const str = 'heeellooo';
そして、単語のリストは-
const words = ["hello", "hi", "helo"];
そして、出力は-
である必要がありますconst output = 1
例
このためのコードは-
になりますconst str = 'heeellooo'; const words = ["hello", "hi", "helo"]; const extraWords = (str, words) => { let count = 0; for (let w of words) { let i = 0; let j = 0; for (; i < str.length && j < w.length && w[j] === str[i];) { let lenS = 1; let lenW = 1; for (; i+lenS < str.length && str[i+lenS] === str[i]; lenS++); for (; j+lenW < w.length && w[j+lenW] === w[j]; lenW++); if (lenS < lenW || lenS > lenW && lenS < 3) break; i += lenS; j += lenW; } if (i === str.length && j === w.length) { count++; } } return count; } console.log(extraWords(str, words));
出力
そして、コンソールの出力は-
になります1
-
JavaScriptでバナナ問題を配布する
問題 行列に並んでいる人がn人いるとすると、次のようにバナナを配りたいと思います- 最初の人に1本のバナナを、2人目の人に2本のバナナを与え、最後の人にn本のバナナを与えるまで続きます。 次に、行の最初に戻り、最初の人にn + 1本のバナナ、2人目の人にn + 2本のバナナを与え、最後の人に2*n本のバナナを与えるまで続けます。 このプロセスは、キャンディーがなくなるまで繰り返されます(毎回バナナをもう1つ与え、最後に到達した後、列の最初に移動します)。最後の人は残りのバナナをすべて受け取ります。 最初の引数として人数numを取り、2番目の引数としてバナナの数mを受け
-
JavaScriptの文字列に存在する単語を逆にする
問題 文を表す文字列を受け取るJavaScript関数を作成する必要があります。 この関数は、文字列に存在する語順を逆にして、新しい文字列を返す必要があります。 つまり、最後の単語が最初になり、最後から2番目が2番目になります。 例 以下はコードです- const str = 'this is some random string text'; const reverseWords = (str = '') => { const strArr = str.split(' '); s