func isAlienSorted(words []string, order string) bool {
// 初始化一个map,代表在新字典序对应的权重
alphabetMap := make(map[byte]int)
for i, i2 := range order {
alphabetMap[byte(i2)] = i
}
ans := true
for i := 0; i < len(words)-1; i++ {
// 如果二者相等,直接下一波循环
if words[i+1] == words[i] {
continue
}
shortLen := min(len(words[i+1]), len(words[i]))
for j := 0; j < shortLen; j++ {
if alphabetMap[words[i][j]] < alphabetMap[words[i+1][j]] {
// 如果是最后俩单词,且满足字典序,直接返回true。
if i+1+1 == len(words) {
return true
}
break
}
// 比较在给定的字典序里的大小
if alphabetMap[words[i][j]] > alphabetMap[words[i+1][j]] {
ans = false
return ans
}
}
// 如果内存循环走完,这里我们要考虑,"apple","app" 这种情况,
// 使用Compare函数,比较二者,如果大于0 就代表没有遵守给的字典序。
if strings.Compare(words[i], words[i+1]) > 0 {
ans = false
}
}
return ans
}
func min(a, b int) int {
if a > b {
return b
}
return a
}