检查单词是否按照新的字母顺序排序
原文:https://www . geeksforgeeks . org/check-如果单词是按照新的字母顺序排序的/
给定单词序列和字母表顺序。字母表的顺序是一些小写字母的排列。任务是检查给定的单词是否按照字母顺序按字典顺序排序。如果是,返回“真”,否则返回“假”。
示例:
输入:字数= [“你好”、“leet code”],订单=“habbcldefgijknmopqrstuvwxyz” T3】输出:真
输入:word =[“word”、“world”、“row”],Order =“abccworldefghijkmnpqstuxyz” T3】输出: false 解释:As‘d’在 Order 中排在‘l’之后,因而 word[0]>word[1],因此顺序未排序。
方法:当且仅当相邻单词排序时,单词按字典顺序排序。这是因为顺序是可传递的,即如果 a < = b 和 b < = c,就意味着 a < = c。
所以我们的目标是检查所有相邻的单词 a 和 b 是否都有 a <= b。
为了检查对于两个相邻的单词 a 和 b,a <= b 是否成立,我们可以找到它们的第一个区别。例如,“见过”和“场景”的第一个区别是 e 和 c。之后,我们按顺序将这些字符与索引进行比较。
我们必须有效地处理空白字符。例如,如果我们比较“加”和“加”,这是(空)和“我”的第一个区别。
以下是上述方法的实施:
Python 3
# 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))
Output:
True
时间复杂度: O(N),其中 N 为所有单词中的字符总数。
辅助空间: O(1)
版权属于:月萌API www.moonapi.com,转载请注明出处