강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của yundosa2
yundosa2

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

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)

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

Viết

·

278

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님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

안녕하세요^^

사실 영상의 방법이 시간복잡도가 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님의 프로필 이미지
highJoon
Người đặt câu hỏi

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

Hình ảnh hồ sơ của yundosa2
yundosa2

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

Đặt câu hỏi