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

JavaScript의 원형 문자열에 있는 고유한 하위 문자열

<시간/>

문제

S, str이 있다고 가정합니다. 이것은 문자열의 무한 랩어라운드 문자열입니다 -

"abcdefghijklmnopqrstuvwxyz".

따라서 S는 다음과 같이 보일 것입니다 -

"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....".

str을 받는 JavaScript 함수를 작성해야 합니다. 이 문자열을 유일한 인수로 str이라고 부르겠습니다.

  • 우리 함수는 str의 비어 있지 않은 고유한 부분 문자열이 S에 몇 개 있는지 알아내야 합니다.

  • 우리의 함수는 마침내 문자열 S에서 str의 비어 있지 않은 다른 부분 문자열의 수를 반환해야 합니다.

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

인 경우
const str = "zab";

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

const output = 6;

출력 설명

문자열 S에 문자열 "zab"의 6개의 부분 문자열 "z", "a", "b", "za", "ab", "zab"가 있습니다.

예시

이에 대한 코드는 -

const str = "zab";
const allSubstrings = (str = '') => {
   const dp = new Array(26).fill(0);
   dp[str.charCodeAt(0) - 97] = 1;
   maxCount = 1;
   for (let i = 1; i < str.length; i++) {
      if ((str.charCodeAt(i) - str.charCodeAt(i - 1) == 1) || (str.charCodeAt(i) - str.charCodeAt(i - 1) == -25)) {
         maxCount++;
      } else {
         maxCount = 1;
      }
      dp[str.charCodeAt(i) - 97] = Math.max(dp[str.charCodeAt(i) - 97], maxCount);
   }
   return dp.reduce((item, val) => {
      return val + item;
   })
};
console.log(allSubstrings(str));

출력

콘솔의 출력은 -

6