Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

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

  1. JavaScriptで最長の連続結合を検索する

    問題 最初で唯一の引数として、数値のペアarrの配列を受け取るJavaScript関数を作成する必要があります。すべてのペアで、最初の数字は常に2番目の数字よりも小さくなります。 ここで、b

  2. 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