Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm chuỗi con dài nhất không phổ biến trong mảng trong JavaScript

Trình tự con

Đối với mục đích của vấn đề này, chúng tôi định nghĩa một dãy con là một dãy có thể bắt nguồn từ một dãy bằng cách xóa một số ký tự mà không thay đổi thứ tự của các phần tử còn lại. Bất kỳ chuỗi nào cũng là một dãy con của chính nó và một chuỗi rỗng là một dãy con của bất kỳ chuỗi nào.

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng chuỗi làm đối số duy nhất. Hàm của chúng ta cần tìm độ dài của dãy con dài nhất không phổ biến trong số chúng.

Theo ý chúng tôi là dãy con dài nhất không phổ biến, dãy con dài nhất của một trong các chuỗi trong mảng và dãy con này không được là bất kỳ dãy con nào của các chuỗi khác trong mảng.

Nếu không tồn tại dãy con không phổ biến, chúng ta nên trả về -1.

Ví dụ:nếu đầu vào của hàm là -

const arr = ["aba", "cdc", "eae"];

Sau đó, đầu ra phải là -

const output = 3;

Giải thích đầu ra:

“Aba”, “cdc” và “eae” đều là dãy con có độ dài 3 không phổ biến hợp lệ.

Ví dụ

Mã cho điều này sẽ là -

const arr = ["aba", "cdc", "eae"];
const longestUncommon = (strs) => {
   const map = {};
   const arr = [];
   let max = -1;
   let index = -1;
   for(let i = 0; i < strs.length; i++){
      map[strs[i]] = (map[strs[i]] || 0) + 1;
      if(map[strs[i]] > 1){
         if(max < strs[i].length){
            max = strs[i].length
            index = i;
         }
      }
   }
   if(index === -1) {
      strs.forEach(el =>{
         if(el.length > max) max = el.length;
      })
      return max;
   }
   for(let i = 0; i < strs.length; i++){
      if(map[strs[i]] === 1) arr.push(strs[i]);
   }
   max = -1
   for(let i = arr.length - 1; i >= 0; i--){
      let l = arr[i];
      let d = 0;
      for(let j = 0; j < strs[index].length; j++){
         if(strs[index][j] === l[d]){
            d++;
         }
      }
      if(d === l.length){
         let temp = arr[i];
         arr[i] = arr[arr.length - 1];
         arr[arr.length - 1] = temp;
         arr.pop();
      }
   }
   arr.forEach(el =>{
      if(el.length > max) max = el.length;
   })
   return max;
};
console.log(longestUncommon(arr));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

3