📌  相关文章
📜  检查单词是否按照新的字母顺序排序

📅  最后修改于: 2021-04-21 22:37:13             🧑  作者: Mango

给定一个单词序列和字母顺序。字母的顺序是一些小写字母的排列。任务是检查给定单词是否按照字母顺序在字典上排序。如果是,则返回“ True”,否则返回“ False”。

例子:

方法:当且仅当对相邻单词进行排序时,才按字典顺序对单词进行排序。这是因为顺序是可传递的,即如果a <= b并且b <= c,则意味着a <= c。

因此,我们的目标是检查所有相邻单词a和b是否都具有<= b。

要检查两个相邻词a和b是否满足a <= b,我们可以找到它们的第一个差异。例如,“ seen”和“ scene”具有e和c的第一个差异。之后,我们将这些字符按顺序与索引进行比较。

我们必须有效地处理空白字符。例如,如果我们将“ add”与“ addition”进行比较,则这是(NULL)与“ i”的第一个区别。

下面是上述方法的实现:

Python3
# Function to check whether Words are sorted in given Order
def isAlienSorted(Words, Order):
    Order_index = {c: i for i, c in enumerate(Order)}
  
    for i in range(len(Words) - 1):
        word1 = Words[i]
        word2 = Words[i + 1]
  
        # Find the first difference word1[k] != word2[k].
        for k in range(min(len(word1), len(word2))):
  
            # If they compare false then it's not sorted.
            if word1[k] != word2[k]:
                if Order_index[word1[k]] > Order_index[word2[k]]:
                    return False
                break
        else:
  
            # If we didn't find a first difference, the
            # Words are like ("add", "addition").
            if len(word1) > len(word2):
                return False
  
    return True
  
  
# Program Code
Words = ["hello", "leetcode"]
Order = "habcldefgijkmnopqrstuvwxyz"
  
# Function call to print required answer
print(isAlienSorted(Words, Order))


输出:
True

时间复杂度: O(N),其中N是所有单词中字符的总数。

辅助空间: O(1)