953. Verifying an Alien Dictionary

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mygodhome/article/details/85385929

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 orderof 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[0] > words[1], 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).

Note:

  1. 1 <= words.length <= 100
  2. 1 <= words[i].length <= 20
  3. order.length == 26
  4. All characters in words[i] and order are english lowercase letters.

根据order里字母出现的顺序,判断words中的值是不是有序的,即是否words[0]<words[1]<...words[len(words)-1]

用python内建的enumerate函数:
enumerate(list,start=0)
上述函数中,list是一个可迭代的对象,可以是列表,字典,文件对象等等。

扫描二维码关注公众号,回复: 4713345 查看本文章

enumerate返回的是下标和item组成的元组:

a=['ab', 'bc', 'cc']

>>> list(enumerate(a))
[(0, 'ab'), (1, 'bc'), (2, 'cc')]

可以是字典
>>> dict(enumerate(a))
{0: 'ab', 1: 'bc', 2: 'cc'}

class Solution:
    def isAlienSorted(self, words, order):
        """
        :type words: List[str]
        :type order: str
        :rtype: bool
        """
        dictm={}
       # words=["word","world","row"]

        #order="worldabcefghijkmnpqstuvxyz"
        #dictm=dict(enumerate(order))
        for k, i in enumerate(order):             
            dictm[i] = k
    
        for i in range(len(words)-1):
            b=0
            x=words[i]
            y=words[i+1]
            for j in range (min(len(x),len(y))):
                if dictm[x[j]] > dictm[y[j]]:
                    return False
                if dictm[x[j]] < dictm[y[j]]:
                    b=1
                    break
            if b==0 and len(x) > len(y):
                return False
        return True
    

猜你喜欢

转载自blog.csdn.net/mygodhome/article/details/85385929
今日推荐