총 3가지의 경우일 때 same character가 된다.
- 각각의 문자 1개
- 문자의 갯수가 1이 아닌 홀수이고, 가운데 문자만 다를 때
- 문자의 갯수가 짝수이고, 모두 같을 때
function substrCount(n, s) {
const array = s.split("");
const stack = Array.from({ length: n }, () => 0); // 배열의 초기화시킨다.
// 1, 2번을 체크한다.
let sum = 0;
let i = 0;
while (i < n) {
const char = array[i];
let count = 1;
let j = i + 1;
while (j < array.length && char === array[j]) {
count++;
j++;
}
stack[i] = count; // 배열에서 중복되는 문자의 갯수를 세어서 넣는다.
sum += parseInt(count * ((count + 1) / 2), 10); // 중복되는 문자로 만들 수 있는 경우의 수
i = j;
}
// 3번을 체크한다.
for (let i = 1; i < array.length; i++) {
if (array[i] === array[i - 1]) {
stack[i] = stack[i - 1];
}
if (array[i - 1] === array[i + 1] && array[i + 1] !== array[i]) {
sum += Math.min(stack[i - 1], stack[i + 1]); // 양쪽 방향으로 문자의 중복 갯수가 최소인 것
}
}
return sum;
}
'Programming > 데일리 알고리즘' 카테고리의 다른 글
[HackerRank] Luck Balance (javascript) (0) | 2021.05.31 |
---|---|
[HackerRank] Minimum Swaps 2 (javascript) (0) | 2021.05.30 |
[HackerRank] Largest Rectangle (Javascript) (0) | 2021.05.25 |
(210519:BTB) Lesson 6. MaxProductOfThree (0) | 2021.05.19 |
(210519:BTB) Lesson 6. Distinct (0) | 2021.05.19 |