[LeetCode] Check Distances Between Same Letters

아르당·2026년 9월 5일

LeetCode

목록 보기
509/559
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

영어 소문자로만 구성되고 인덱스가 0부터 시작하는 문자열 s가 주어지고, s의 각 문자는 정확히 두 번씩 등장한다. 또한 길이가 26이고 인덱스가 0부터 시작하는 정수 배열 distance가 주어진다.
알파벳에서 각 문자는 0에서 25까지 번호가 주어진다.
간격이 적절한 문자열에서 i번째 문자가 두 번 나타나는 간격은 distance[i]이다. i번째 문자가 문자열 s에 나타나지 않으면 distance[i]는 무시할 수 있다.
문자열 s가 간격이 적절한 문자열이면 true, 그렇지 않으면 false를 반환해라.

Example

#1
Input: s = "abaccb", distance = [1, 3, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Output: true

#2
Input: s = "aa", distance = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Output: false

Constraints

  • 2 <= s.length <= 52
  • s는 오직 영어 소문자로 구성된다.
  • s에서 각 문자는 정확히 2번 나타난다.
  • distance.length == 26
  • 0 <= distance[i] <= 50

Solved

class Solution {
    public boolean checkDistances(String s, int[] distance) {
        Map<Character, Integer> map = new HashMap<>();

        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);

            if(map.containsKey(c)){
                if(distance[c - 'a'] != i - map.get(c) - 1){
                    return false;
                }
            }else{
                map.put(c, i);
            }
        }

        return true;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글