Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 배열에서 흔하지 않은 가장 긴 부분 문자열 찾기

<시간/>

서열

이 문제의 목적을 위해 나머지 요소의 순서를 변경하지 않고 일부 문자를 삭제하여 한 시퀀스에서 파생될 수 있는 시퀀스로 하위 시퀀스를 정의합니다. 모든 문자열은 자신의 하위 시퀀스이고 빈 문자열은 모든 문자열의 하위 시퀀스입니다.

문제

문자열 배열을 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다. 우리의 함수는 그들 중에서 가장 긴 비일반적인 부분수열의 길이를 찾아야 합니다.

가장 길고 흔하지 않은 하위 시퀀스는 배열에 있는 문자열 중 하나의 가장 긴 하위 시퀀스를 의미하며 이 하위 시퀀스는 배열에 있는 다른 문자열의 하위 시퀀스가 ​​아니어야 합니다.

흔하지 않은 하위 시퀀스가 ​​없으면 -1을 반환해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const arr = ["aba", "cdc", "eae"];

그러면 출력은 다음과 같아야 합니다. -

const output = 3;

출력 설명:

"aba", "cdc" 및 "eae"는 모두 길이가 3인 유효한 드문 하위 시퀀스입니다.

예시

이에 대한 코드는 -

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));

출력

콘솔의 출력은 -

3