205. Isomorphic Strings

늘보·2021년 10월 24일
0

LeetCode

목록 보기
59/69

💡 풀이

var isIsomorphic = function (s, t) {
  if (s.length !== t.length) return false;
  let obj = {};

  for (let i = 0; i < s.length; i++) {
    if (obj[s[i]]) {
      let cur = obj[s[i]];
      if (cur !== t[i]) return false;
    }
    // 없다면
    else {
      obj[s[i]] = t[i];
    }
  }

  // console.table(obj);

  let noDups = new Set([...Object.values(obj)]).size;
  let dups = Object.values(obj).length;

  //   console.log('길이: ', new Set([...Object.values(obj)]).size);
  //   console.log('길이: ', Object.values(obj).length);

  return noDups === dups;
};

📝 결과

📝 정리

마찬가지로 HashMap에 관련된 문제다. 시간 복잡도는 O(N)이며, s, t 두 string이 isomorphic한지 체크하는 문제다.

  • obj 객체를 먼저 하나 선언해준다.

  • 반복문을 돌며 obj 객체의 keys[i]로, valuet[i]를 만든다. 그 과정에서 obj[s[i]]value 값(이전)과 현재의 value가 될 값인 t[i]가 다르다면 falsereturn 해준다.

  • 여기서 끝이 아니고, 지금까지는 obj 객체의 keys[i]로 했는데, unique한 key값이 unique한 value값과 다른 경우가 있다. let s = 'badc', t = 'badd'; 같은 경우. 이 경우 obj 객체는 다음 이미지와 같다.

  • 만약 그런 경우라면 obj 객체의 unique한 value의 개수와, 전체 value의 개수가 달라질 것이기 때문에, 마지막에 set을 이용해 전체 value가 담긴 배열을 unique하게 만든 배열과, Object.values(obj)를 이용해 전체 value 값을 담은 배열의 길이가 같은지 비교해서 return 해주면 마무리가 된다.

수정, 지적을 환영합니다!

문제 링크

https://leetcode.com/problems/isomorphic-strings/

LeetCode GitHub

https://github.com/tTab1204/LeetCode

0개의 댓글

관련 채용 정보