문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
영어 소문자로만 구성되고 인덱스가 0부터 시작하는 문자열 s가 주어지고, s의 각 문자는 정확히 두 번씩 등장한다. 또한 길이가 26이고 인덱스가 0부터 시작하는 정수 배열 distance가 주어진다.
알파벳에서 각 문자는 0에서 25까지 번호가 주어진다.
간격이 적절한 문자열에서 i번째 문자가 두 번 나타나는 간격은 distance[i]이다. i번째 문자가 문자열 s에 나타나지 않으면 distance[i]는 무시할 수 있다.
문자열 s가 간격이 적절한 문자열이면 true, 그렇지 않으면 false를 반환해라.
#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
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;
}
}