본문 바로가기
DS & Algo/풀이모음

[leetcode/JS] 387_First Unique Character in a String 풀이

by 5kdk 2022. 11. 28.

🎲 문제

387. First Unique Character in a String

Easy


 

문자열 s가 주어지면 그 안에 있는 첫 번째 비반복 문자를 찾아 인덱스를 반환합니다. 존재하지 않으면 -1을 반환합니다.

더보기

 

Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.

 

 

Example 1:

Input: s = "leetcode"
Output: 0

Example 2:

Input: s = "loveleetcode"
Output: 2

Example 3:

Input: s = "aabb"
Output: -1

 

Constraints:

  • 1 <= s.length <= 105
  • s consists of only lowercase English letters.

 


💡 접근 방법

  • 스프레드한 문자열을 reduce 함수로 카운팅된 오브젝트를 생성
  • 오브젝트의 value가 1인 key를 찾고 unique에 할당
  • unique에 할당된 값이 undifined 이면 -1 반환하고 아닐경우 문자열 s에 indexOf 로 unique의 첫번째 인덱스를 반환

👀 my code

/**
 * @param {string} s
 * @return {number}
 */
var firstUniqChar = function (s) {

  const obj = [...s].reduce((acc, curr) => {
    if (acc[curr]) {
      acc[curr]++
    } else {
      acc[curr] = 1;
    }
    return acc
  }, {})

  const unique = Object.keys(obj).find(key => obj[key] === 1);
  
  return unique === undefined ? -1 : s.indexOf(unique);
};

 

👀 for loof로 해결한 솔루션

 
var firstUniqChar = function(s) {
    let obj = {};
    for (let i of s){
        obj[i] ? obj[i] += 1 : obj[i] = 1
    }
    for (let i = 0; i < s.length; i++) {
        if (obj[s[i]] === 1) return i;
    }
    return -1
};

 

댓글