JavaScriptの最長の文字列チェーンの長さ
ワードチェーン
word1の任意の場所に正確に1文字を追加して、word2と等しくできる場合に限り、word1がword2の前身であるとしましょう。たとえば、「abc」は「abac」の前身です。
ワードチェーンは、k> =1の単語[word_1、word_2、...、word_k]のシーケンスです。ここで、word_1はword_2の先行であり、word_2はword_3の先行です。
問題
最初で唯一の引数として、文字列の配列arrを受け取るJavaScript関数を作成する必要があります。
配列arrの各文字列は、英語の小文字で構成されています。この関数は、指定された配列arrから選択された単語を含む単語チェーンの可能な限り長い長さを返す必要があります。
たとえば、関数への入力が-
の場合const arr = ["a","b","ba","bca","bda","bdca"];
その場合、出力は-
になります。const output = 4;
出力の説明:
最も長い単語チェーンの1つは、「a」、「ba」、「bda」、「bdca」です。
例
このためのコードは-
になりますconst arr = ["a","b","ba","bca","bda","bdca"];
const longestStrChain = (arr) => {
arr.sort((a, b) => a.length - b.length);
const isPredecessor = (word1 = '', word2 = '') => {
if(Math.abs(word1.length - word2.length) !== 1){
return false;
};
for(let i = 0; i < word2.length; i++){
const word = word2.slice(0, i) + word2.slice(i + 1);
if(word === word1){
return true;
};
};
return false;
};
const array = [];
let max = 0;
for(let i = arr.length - 1; i >= 0; i--){
array[i] = 1;
for(let j = arr.length - 1; j > i; j--){
if(isPredecessor(arr[i], arr[j])){
array[i] = Math.max(
array[i],
1 + array[j],
);
};
};
max = Math.max(max, array[i]);
};
return max;
};
console.log(longestStrChain(arr)); 出力
そして、コンソールの出力は-
になります4
-
JavaScriptで最長の連続結合を検索する
問題 最初で唯一の引数として、数値のペアarrの配列を受け取るJavaScript関数を作成する必要があります。すべてのペアで、最初の数字は常に2番目の数字よりも小さくなります。 ここで、b
-
C++で最長の文字列チェーン
=1の一連の単語[word_1、word_2、...、word_k]です。ここで、word_1はword_2の先行であり、word_2はword_3の先行です。与えられた単語のリストから選択された単語を使用して、単語チェーンの可能な限り長い長さを見つける必要があります。 したがって、入力が[a、 b、 ba、 bca、 bda、 bdca]の場合、最長のチェーンの1つが[ a」、「ba」、「bda」、「bdca」]。 これを解決するには、次の手順に従います- マップを定義するdp、n:=単語配列のサイズ 長さに基づいて単語配列を並べ替える ret:=0 範囲0tn