# 953. Verifying an Alien Dictionary

Easy
In an alien language, surprisingly, they also use English lowercase letters, but possibly in a different `order`. The `order` of the alphabet is some permutation of lowercase letters.
Given a sequence of `words` written in the alien language, and the `order` of the alphabet, return `true` if and only if the given `words` are sorted lexicographically in this alien language.
Example 1:
Input: words = ["hello","leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz"
Output: true
Explanation: As 'h' comes before 'l' in this language, then the sequence is sorted.
Example 2:
Input: words = ["word","world","row"], order = "worldabcefghijkmnpqstuvxyz"
Output: false
Explanation: As 'd' comes after 'l' in this language, then words > words, hence the sequence is unsorted.
Example 3:
Input: words = ["apple","app"], order = "abcdefghijklmnopqrstuvwxyz"
Output: false
Explanation: The first three characters "app" match, and the second string is shorter (in size.) According to lexicographical rules "apple" > "app", because 'l' > '∅', where '∅' is defined as the blank character which is less than any other character ().
Constraints:
• `1 <= words.length <= 100`
• `1 <= words[i].length <= 20`
• `order.length == 26`
• All characters in `words[i]` and `order` are English lowercase letters.

### 解題

func isAlienSorted(words []string, order string) bool {
m := make(map[byte]int)
for i:=0; i<len(order); i++ { // 將字母與 order 做對應
m[order[i]] = i
}
for i:=1; i<len(words); i++ {
// 如果 words[i] 沒有大於前一個，則回傳 false
if !compare(words[i], words[i - 1], m) { return false }
}
return true
}
func compare(w1, w2 string, m map[byte]int) bool {
for i := 0; i < len(w1) && i < len(w2); i++ {
if w1[i] != w2[i] {
if m[w1[i]] > m[w2[i]] {
return true
} else {
return false
}
}
}
return len(w1) >= len(w2) // 字母都相同時，長度較短的應該排在前面
}