作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/


题目地址:https://leetcode.com/contest/weekly-contest-114/problems/verifying-an-alien-dictionary/

题目描述

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 order of 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.

题目大意

题目给出的所有字符都是小写字符,给了一个新的字母表顺序,问,给出的words数组,是不是有序的。

解题方法

直接依次进行判断即可。拿出两个相邻的字符串pre和after,然后判断他们的相同位置的每个字符的顺序,如果pre的某个位置小于after,说明这两个字符串是有序的,那么继续判断;如果Pre的某个位置大于after,说明不有序,直接返回False。这两部判断完成之后没结束,我们还要继续判断Example 3的情况,所以,需要判断pre的长度是不是大于after,并且after等于pre的前部分。

在遍历完所有的字符串之后都没有返回False,说明是有序的,那么返回True.

class Solution(object):
def isAlienSorted(self, words, order):
"""
:type words: List[str]
:type order: str
:rtype: bool
"""
N = len(words)
d = {c : i for i, c in enumerate(order)}
for i in range(N - 1):
pre, after = words[i], words[i + 1]
if pre == after: continue
_len = min(len(pre), len(after))
for j in range(_len):
if d[pre[j]] < d[after[j]]:
break
elif d[pre[j]] > d[after[j]]:
return False
if len(pre) > len(after) and pre[:_len] == after:
return False
return True

日期

2018 年 12 月 9 日 —— 周赛懵逼了

最新文章

  1. bzoj1800[Ahoi2009]fly 飞行棋 暴力枚举
  2. Spring Framework的核心:IOC容器的实现
  3. ubuntu 13.04下MYSQL 5.5环境搭建
  4. linux下报错处理经验
  5. UVa11324 最大团 The Largest Clique-有向图强连通分量&amp;DP
  6. 操作笔记:tomcat在正式环境
  7. 手机号段、ip地址归属地大全,最新手机号段归属地,IP地址归属地数据库
  8. Linux 搭建SVN 服务器
  9. CrossBridge介绍
  10. python+NLTK 自然语言学习处理二:文本
  11. html表单验证
  12. 第一篇博客 ---- 分享关于Maven使用的一些技巧
  13. webstorm2018.1 汉化
  14. http post 请求详解
  15. [转] 理解CheckPoint及其在Tensorflow &amp; Keras &amp; Pytorch中的使用
  16. Django -- 部署Django 静态文件不能获取
  17. 确界原理 supremum and infimum principle 戴德金定理 Dedekind theorem
  18. 教你使用SQL数据库复制系列(1-7)
  19. PostGIS 快速入门(转)
  20. SpringIDE的安装

热门文章

  1. python-django-常用models里面的Field
  2. mysql 除法运算保留小数的用法
  3. A Child&#39;s History of England.39
  4. day18定时任务
  5. Spark On Yarn的各种Bug
  6. netty系列之:手持framecodec神器,创建多路复用http2客户端
  7. C++自定义字符串类
  8. Oracle参数文件—pfile与spfile
  9. Linux学习 - 使用qq邮箱发送邮件
  10. oracle(查询数据库对象1)