更多精彩內(nèi)容,請(qǐng)關(guān)注【力扣簡(jiǎn)單題】。
題目
難度:★★☆☆☆
類型:字符串
某種外星語(yǔ)也使用英文小寫字母,但可能順序 order 不同。字母表的順序(order)是一些小寫字母的排列。
給定一組用外星語(yǔ)書寫的單詞 words,以及其字母表的順序 order,只有當(dāng)給定的單詞在這種外星語(yǔ)中按字典序排列時(shí),返回 true;否則,返回 false。
提示
1 <= words.length <= 100
1 <= words[i].length <= 20
order.length == 26
在 words[i] 和 order 中的所有字符都是英文小寫字母。
示例
示例 1
輸入:words = ["hello","leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz"
輸出:true
解釋:在該語(yǔ)言的字母表中,'h' 位于 'l' 之前,所以單詞序列是按字典序排列的。
示例 2
輸入:words = ["word","world","row"], order = "worldabcefghijkmnpqstuvxyz"
輸出:false
解釋:在該語(yǔ)言的字母表中,'d' 位于 'l' 之后,那么 words[0] > words[1],因此單詞序列不是按字典序排列的。
示例 3
輸入:words = ["apple","app"], order = "abcdefghijklmnopqrstuvwxyz"
輸出:false
解釋:當(dāng)前三個(gè)字符 "app" 匹配時(shí),第二個(gè)字符串相對(duì)短一些,然后根據(jù)詞典編纂規(guī)則 "apple" > "app",因?yàn)?'l' > '?',其中 '?' 是空白字符,定義為比任何其他字符都?。ǜ嘈畔ⅲ?/p>
解答
外星語(yǔ)和英語(yǔ)的區(qū)別是,字母表中各個(gè)字母的先后順序不一樣,我們要判斷輸入的單詞列表是否按照外星語(yǔ)的字母順序排列。
如果理解英語(yǔ)單詞按照字典順序排列的規(guī)則,就可以解決這個(gè)問(wèn)題。英語(yǔ)中,單詞的排序根據(jù)相應(yīng)位置字母在字母表中出現(xiàn)的順序進(jìn)行排序,且單詞從左到右優(yōu)先級(jí)遞減。
我們可以對(duì)每個(gè)單詞構(gòu)建一個(gè)索引列表,用來(lái)存儲(chǔ)單詞中各個(gè)字母在字母表中出現(xiàn)的位置,根據(jù)每個(gè)單詞對(duì)應(yīng)的索引列表對(duì)單詞進(jìn)行排序,如果將字母表更換成外星語(yǔ)字母表的順序,既可獲得按照外星語(yǔ)詞典排序的結(jié)果,通過(guò)按照該方法排序的結(jié)果和輸入的單詞列表是否一致可以實(shí)現(xiàn)題目要求的判斷。
這里我們可以使用python中的sort方法,該方法就有key關(guān)鍵字選項(xiàng),我們可以傳進(jìn)一個(gè)函數(shù)作為參數(shù),這樣排序時(shí)就會(huì)首先將每個(gè)元素先送到函數(shù)中,利用函數(shù)的輸出進(jìn)行排序。該函數(shù)實(shí)現(xiàn)的功能就是將單詞轉(zhuǎn)變?yōu)樗饕斜?,用lambda表達(dá)式進(jìn)行定義。
class Solution:
def isAlienSorted(self, words, order):
"""
:param words: List[str]
:param order: str
:return: bool
"""
return words == sorted(words, key=lambda w: [order.index(c) for c in w])
如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~