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

JavaScript에서 중복 문자 발생을 한 번으로 제한

<시간/>

문제

문자열 str을 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

함수는 입력 문자열을 기반으로 새 문자열을 준비해야 합니다. 여기서 각 문자의 유일한 모습은 유지되고 유지되는 문자는 결과 문자열을 사전순으로 가장 작게 만드는 문자입니다.

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

인 경우
const str = 'cbacdcbc';

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

const output = 'acdb';

출력 설명:

문자열에서 'c'를 제거할 수도 있었지만 가장 먼저 제거했기 때문에 사전순으로 문자열이 'a'와 'b'의 경우에 가장 작고 동일하게 됩니다.

예시

이에 대한 코드는 -

const str = 'cbacdcbc';
const removeDuplicates = (str = '') => {
   if (str.length <= 1) {
      return str;
   };
   let flag;
   let string = "";
   let legend = new Array(26).fill(-1 let last = "z";
   let ind = 0;
   for (let i = str.length - 1; i > -1; i--) {
      const element = str[i];
      if (legend[element.charCodeAt() - 97] < 0) {
         legend[element.charCodeAt() - 97] = i;
         last = element;
         ind = i;
         string += element;
      } else {
         if (last >= element) {
            last = element;
            ind = i;
         }
      }
   }
   let finalStr = last;
   while (string.length > finalStr.length) {
      legend.fill(-1);
      for (let i = str.length - 1; i > ind; i--) {
         const element = str[i];
         if (finalStr.indexOf(element) < 0) {
            if (legend[element.charCodeAt() - 97] < 0) {
               legend[element.charCodeAt() - 97] = i;
               last = element;
               flag = i;
            } else {
               if (last >= element) {
                  last = element;
                  flag = i;
               }
            }
         }
      }
      ind = flag;
      finalStr += last;
   }
   return finalStr;
};
console.log(removeDuplicates(str));

코드 설명:

여기서 아이디어는 -

처음으로 전체 문자열을 반복하여 사용된 문자를 확인하고 모든 문자를 포함하는 가장 작은 시작 문자 하위 문자열을 찾습니다.

이것은 오른쪽에서 왼쪽으로 루프를 시작하고 부분 문자열의 시작 위치와 시작 최소 문자를 기억하면 이해하기 쉽습니다.

그런 다음 부분 문자열(최소 시작 문자 제외)을 계속 오른쪽에서 왼쪽으로 반복하기 시작하지만 이번에는 이미 저장한 문자를 무시해야 합니다.

출력

콘솔의 출력은 -

acdb