본문 바로가기
Algorithm/알고리즘 문제풀이

LeetCode 387(First Unique Character in a String, java)

by devraphy 2022. 4. 14.

0. 문제

https://leetcode.com/problems/first-unique-character-in-a-string/

 

First Unique Character in a String - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

1. 문제 설명

- 문제에서 문자열(s)이 주어진다.

- 문자열을 구성하는 문자 중 가장 첫 번째로 중복이 없는 문자를 찾아 해당 문자의 index를 반환하는 것이 문제의 핵심이다.

 

2. 문제 해설

- 이 문제를 풀기 위해서는 문자열의 각 문자를 접근하는 방식을 알아야 한다.

 

a) 첫 번째 접근

- 문자열의 길이를 구하고, 문자열의 길이만큼 for문을 반복하여 각 문자에 접근한다.

- 각 문자에 접근하기 위해서 for문 내부에서 charAt() 메서드를 이용한다.

 

b) 두 번째 접근

- 각 문자열의 등장 횟수를 기록하기 위하여 HashMap을 사용한다.

- key는 문자이며 value는 등장 횟수가 된다.

- 첫 번째 접근에서 작성한 for 반복문 내부에서 각 문자열의 등장 횟수를 체크하여 HashMap에 저장한다.

 

c) 세 번째 접근

- 모든 문자의 등장 횟수를 HashMap에 기록했다면 이제 가장 처음으로 중복되지 않은 문자를 찾아야 한다.

- 첫 번째 접근에서 사용했던 방식과 동일하게 for문을 사용하여 Map을 탐색한다.

- for문 내부에서 charAt()을 key로 사용하여 HashMap에 저장된 문자의 등장 횟수를 체크한다.

- HashMap을 탐색하면서 등장 횟수가 1이라면 해당 문자의 index를 반환하고 종료한다. 

- 만약 모든 문자의 등장 횟수가 2 이상이라면 -1을 반환한다. 

 

- 다음 코드를 보면서 이해해보자.  

 

3. 정답 코드

class Solution {
    public int firstUniqChar(String s) {
        
        int len = s.length();
        HashMap<Character, Integer> map = new HashMap<>();
        
        for(int i = 0; i < len; i++) {
            char current = s.charAt(i);
            map.put(current, map.getOrDefault(current, 0) + 1);
        }
        
        for(int i = 0; i < len; i++) {
            if(map.get(s.charAt(i)) == 1) {
                return i;
            }
        }
        return -1;
    }
}

댓글