## 953. Verifying an Alien Dictionary

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 lexicographicaly 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 (More info).
```

Constraints:

• `1 <= words.length <= 100`
• `1 <= words[i].length <= 20`
• `order.length == 26`
• All characters in `words[i]` and `order` are English lowercase letters.

## Rust Solution

``````struct Solution;

impl Solution {
fn is_alien_sorted(words: Vec<String>, order: String) -> bool {
let mut mapping: Vec<char> = vec![0 as char; 256];
for (i, c) in order.chars().enumerate() {
mapping[c as usize] = (i as u8 + b'a') as char;
}
let words: Vec<String> = words
.into_iter()
.map(|s| Self::translate(s, &mapping))
.collect();
let mut sorted: Vec<String> = words.to_vec();
sorted.sort();
words == sorted
}

fn translate(s: String, mapping: &[char]) -> String {
s.chars().map(|c| mapping[c as usize]).collect()
}
}

#[test]
fn test() {
let words: Vec<String> = vec_string!["hello", "leetcode"];
let order: String = "hlabcdefgijkmnopqrstuvwxyz".to_string();
assert_eq!(Solution::is_alien_sorted(words, order), true);

let words: Vec<String> = vec_string!["word", "world", "row"];
let order: String = "worldabcefghijkmnpqstuvxyz".to_string();
assert_eq!(Solution::is_alien_sorted(words, order), false);

let words: Vec<String> = vec_string!["apple", "app"];
let order: String = "abcdefghijklmnopqrstuvwxyz".to_string();
assert_eq!(Solution::is_alien_sorted(words, order), false);

let words: Vec<String> = vec_string!["kuvp", "q"];
let order: String = "ngxlkthsjuoqcpavbfdermiywz".to_string();
assert_eq!(Solution::is_alien_sorted(words, order), true);
}
``````

Having problems with this solution? Click here to submit an issue on github.