때때로 사람들은 "hello" -> "heeellooo", "hi" -> "hiiii"와 같은 추가 감정을 나타내는 문자를 반복합니다. "heeellooo"와 같은 이러한 문자열에는 "h", "eee", "ll", "ooo"와 같이 모두 동일한 인접 문자 그룹이 있습니다.
주어진 문자열 S에 대해 다음 확장 작업의 응용 프로그램 수에 관계없이 S와 같게 만들 수 있는 경우 쿼리 단어는 신축성이 있습니다. 문자 c로 구성된 그룹을 선택하고 해당 그룹에 몇 개의 문자 c 추가 그룹의 크기는 3개 이상입니다.
예를 들어 "hello"로 시작하여 "hellooo"를 가져오기 위해 "o" 그룹에 대한 확장을 수행할 수 있지만 그룹 "oo"의 크기가 3보다 작기 때문에 "helloo"를 얻을 수 없습니다. 또한 다음을 수행할 수 있습니다. "ll" −> "llllll"과 같은 다른 확장자를 사용하여 "hellllooo"를 얻습니다. S ="hellllooo"인 경우 쿼리 단어 "hello"는 다음 두 가지 확장 작업으로 인해 늘어나게 됩니다. query ="hello" −> "hellooo" −> "helllllooo" =S.
쿼리 단어 목록이 주어지면 늘어나는 단어 수를 반환해야 합니다.
예를 들어 -
입력 문자열이 -
인 경우const str = 'heeellooo';
그리고 단어 목록은 -
const words = ["hello", "hi", "helo"];
출력은 다음과 같아야 합니다. -
const output = 1
예시
이에 대한 코드는 -
const str = 'heeellooo'; const words = ["hello", "hi", "helo"]; const extraWords = (str, words) => { let count = 0; for (let w of words) { let i = 0; let j = 0; for (; i < str.length && j < w.length && w[j] === str[i];) { let lenS = 1; let lenW = 1; for (; i+lenS < str.length && str[i+lenS] === str[i]; lenS++); for (; j+lenW < w.length && w[j+lenW] === w[j]; lenW++); if (lenS < lenW || lenS > lenW && lenS < 3) break; i += lenS; j += lenW; } if (i === str.length && j === w.length) { count++; } } return count; } console.log(extraWords(str, words));
출력
콘솔의 출력은 -
1