inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Giới thiệu về giải quyết vấn đề thuật toán JavaScript (chuẩn bị cho bài kiểm tra mã hóa)

8. Tìm tất cả các đảo chữ cái (Thuật toán Hash & Sliding Window && Two Pointers)

안녕하세요 강사님. 코드 한번만 봐주시면 감사드리겠습니다.

285

highJoon

17 câu hỏi đã được viết

0

function solution(S, T) {
  const N = T.length;
  let target = S.substr(0, N).split("");
  let answer = 0;
  let isFlag = true;

  let hash = new Map();
  for (let x of T) {
    if (hash.has(x)) hash.set(x, hash.get(x) + 1);
    else hash.set(x, 1);
  }

  for (let rt = N; rt <= S.length; rt++) {
    isFlag = true;
    let temp = new Map(Array.from(hash).slice());

    for (let x of target) {
      if (!temp.has(x) || temp.get(x) === 0) {
        isFlag = false;
        break;
      } else {
        temp.set(x, temp.get(x) - 1);
      }
    }
    if (isFlag) answer++;
    target.push(S[rt]);
    target.shift();
  }

  return answer;
}

let a = "bacaAacba";
let b = "abc";
console.log(solution(a, b));

코테 준비 같이 해요! javascript

Câu trả lời 2

2

codingcamp

안녕하세요^^

사실 영상의 방법이 시간복잡도가 O(N^2)에 가까운 코드입니다. 위에 방법도 target의 길이가 길어지면 시간복잡도는 나빠집니다.

사실 O(n)으로 짜 놓은 코드가 있습니다. 아래 코드를 참조해보세요.

function solution(s, t){
    let answer=0;
    let sH = new Map();
    for(let x of t){
        sH.set(x, (sH.get(x) || 0)-1);
    }
    let len=t.length-1;
    for(let i=0; i<len; i++){
        sH.set(s[i], (sH.get(s[i]) || 0)+1);
        if(sH.get(s[i])===0) sH.delete(s[i]);
    }
    let lt=0;
    for(let rt=len; rt<s.length; rt++){
        sH.set(s[rt], (sH.get(s[rt]) || 0)+1);
        if(sH.get(s[rt])===0) sH.delete(s[rt]);
        if(sH.size===0) answer++;
        sH.set(s[lt], (sH.get(s[lt]) || 0)-1);
        if(sH.get(s[lt])===0) sH.delete(s[lt]);
        lt++;
    }
    return answer;
}
console.log(solution("bacacbcba", "abc"));

0

highJoon

감사합니다. 다시 풀어보겠습니다!

continue를 사용하는 이유

0

79

2

정렬 가능 여부 판단하기

0

64

2

알고리즘 학습법 관련해서 질문드립니다.

0

85

1

코드 리뷰 부탁드립니다!

0

90

1

indexOf를 사용해서 풀어보았습니다 !!

0

68

1

저는 이런식으로 구현 해보았습니다 !!

0

64

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

99

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

63

1

영상 보기 전에 직접 풀어봤습니다.

0

74

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

133

2

정규표현식으로 처리해도 상관없나요 ?

0

120

2

3칸씩 건너뛸 수 있을 경우

0

125

2

강의에 대해 질문있습니다.

0

135

2

Object와 Set을 이용해 풀어봤습니다.

0

117

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

145

2

이렇게 풀어도 괜찮을까요?

0

138

1

이렇게 풀어도 괜찮을까요?

0

112

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

130

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

코드 맞게 작성한 거 아닌가여??

0

146

1