[LeetCode] Verifying an Alien Dictionary

아르당·3일 전

LeetCode

목록 보기
207/213
post-thumbnail

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

Problem

외계 언어에서, 놀랍게도, 영어 소문자를 사용하지만, 다른 order로 사용하고 있다. 알파벳의 order는 소문자의 순열 중 하나일 것이다.

외계 언어로 쓰인 words와 알파벳의 order가 주어졌을 때, 주어진 words가 외계 언어의 사전순으로 정렬되어 있으면 true를 반환해라.

Example

#1
Input: words = ["hello", "leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz"
Output: true
Explanation: 이 언어에서 'h'가 'l'보다 먼저 있어서 정렬되어 있다.

#2
Input: words = ["word", "world", "row"], order = "worldabcefghijkmnpqstuvxyz"
Output: false
Explanation: 이 언어에서 'l' 다음에 'd'가 있어서, words[0] > words[1]이 되어서 정렬되지 있지 않다.

#3
Input: words = ["apple", "app"], order = "abcdefghijklmnopqrstuvwxyz"
Output: false

Constraints

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 20
  • order.length == 26
  • words[i]와 order에 있는 모든 문자는 영어 소문자로 되어있다.

Solved

class Solution {
    public boolean isAlienSorted(String[] words, String order) {
        if(words.length == 1){
            return true;
        }

        Map<Character, Integer> orderMap = new HashMap<>();

        for(int i = 0; i < order.length(); i++){
            orderMap.put(order.charAt(i), i);
        }

        for(int i = 0; i < words.length - 1; i++){
            for(int j = 0; j < words[i].length(); j++){
                if(j >= words[i + 1].length()){
                    return false;
                }

                if(words[i].charAt(j) != words[i + 1].charAt(j)){
                    if(orderMap.get(words[i].charAt(j)) > orderMap.get(words[i + 1].charAt(j))){
                        return false;
                    }else{
                        break;
                    }
                }
            }
        }

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

0개의 댓글