0. 문제
https://leetcode.com/problems/first-unique-character-in-a-string/
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;
}
}
'Algorithm > 알고리즘 문제풀이' 카테고리의 다른 글
LeetCode 242(Valid Anagram, java) (0) | 2022.04.15 |
---|---|
LeetCode 383(Ransom Note, java) (0) | 2022.04.14 |
LeetCode 74(Search a 2D Matrix, java) (0) | 2022.04.14 |
LeetCode 36(Valid Sudoku, java) (0) | 2022.04.13 |
LeetCode 118(Pascal's Triangle, java) (0) | 2022.04.13 |
댓글