验证外星语词典

某种外星语也使用英文小写字母,但可能顺序 order (order.length==26)(order.length == 26)(order.length==26)不同。字母表的顺序(order)是一些小写字母的排列。给定一组用外星语书写的单词 words(1<=words.length<=100,1<=words[i].length<=20)(1 <= words.length <= 100,1 <= words[i].length <= 20)(1<=words.length<=100,1<=words[i].length<=20),以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。在 words[i]order 中的所有字符都是英文小写字母。相关标签:数组,哈希表,字符串。

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 lexicographically in this alien language. All characters in words[i] and order are English lowercase letters. Related Topics: Array, Hash Table, String.

Input: words = ["hello","leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz"
Output: true
Explanation: As 'h' comes before 'l' in this language, then the sequence is sorted.
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.
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).

这个题是一个简单的模拟题,它是让我们判断words这堆字符串是不是有序的。只不过这里在比较字典序的时候不是按照我们英文字母的顺序,而是它给定我们的一个26个英文字母的顺序,我们需要按照这个顺序来判断,那么这里我们直接模拟就可以了。

当我们结束的时候有一个边界情况,就是可能第一个串还没有遍历完,第二个串已经遍历结束了的情况。如果是这样的话,就是前面这一段都相等,然后a多了一段,那么其实a的字典序应该是比b要大的,那么这个的话也是矛盾的,也需要返回false。

复杂度分析:时间复杂度O(m×n)O(m×n)O(m×n),其中 m 为字符串数组的长度,n 为数组中字符串的平均长度,每个字符串需要前一个字符串进行比较,因此时间复杂度为 O(m×n)O(m×n)O(m×n)。空间复杂度O(C)O(C)O(C)。其中 C 表示字母表的长度,需要存储字母表 order 每个字符的字典序索引,题目中给定的字母表的长度为 C=26C=26C=26。

class Solution {public:bool isAlienSorted(vector<string>& words, string order) {// 首先我们开一个哈希表用来存储每一个字母的位置下标unordered_map<char,int> p;// 然后枚举一下所有的字母,第order[i]的字母次序是ifor(int i=0;i<order.size();i++) p[order[i]]=i;// 然后我们从前往后判断一下所有的单词是不是有序的就可以了// 其实就是判断一下下一个字符串的字典序是不是大于等于上一个字符串for(int i=1;i<words.size();i++) {// 用a来表示我们i-1个串,用b来表示我们当前的串auto &a =words[i-1],&b=words[i];// x表示第一个串,y表示第二个串int x=0,y=0;// 枚举一下当前两个串的字典序是不是有序的// 当我们的x没有枚举完第一个串的时候并且当y没有枚举完第二个串的时候while(x<a.size()&&y<b.size()) {// 然后每次判断一下如果我们发现了a[x]的次序是大于b[y]的次序的话// 说明是逆序if(p[a[x]]>p[b[y]]) return false;// 否则我们发现a[x]的次序已经小于b[y]的次序了,表示字典序已经找出来了if(p[a[x]]<p[b[y]]) break;// 否则x,y往后加x++;y++;}// 当我们结束的时候有一个边界情况// 就是前面这一段都相等,然后a多了一段,那么其实a的字典序应该是比b要大的if(x<a.size()&&y==b.size()) return false;}return true;}
};
func isAlienSorted(words []string, order string) bool {index := [26]int{}for i, c := range order {index[c-'a'] = i}
next:for i := 1; i < len(words); i++ {for j := 0; j < len(words[i-1]) && j < len(words[i]); j++ {pre, cur := index[words[i-1][j]-'a'], index[words[i][j]-'a']if pre > cur {return false}if pre < cur {continue next}}if len(words[i-1]) > len(words[i]) {return false}}return true
}

LeetCode 953. 验证外星语词典相关推荐

  1. leetcode 953.验证外星语词典(js)

    题目 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的 ...

  2. leetcode 953. 验证外星语词典 做题笔记

    题目: 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定 ...

  3. Leetcode——953.验证外星语词典——题解+代码实现

    一.题目 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给 ...

  4. LeetCode: 953. 验证外星语词典

    题目 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的 ...

  5. leetcode -- 953验证外星语词典

    这个题目很有趣.一开始读题目感觉跟读外国语一样,等到后来,突然想明白,这跟小学的时候学习使用字典是一样的过程,就忽然明白了,同时获得了和小时候忽然明白查字典一样的快乐了 public boolean ...

  6. LeetCode 812. 最大三角形面积(再次用到凸包的Andrew算法) / 面试题 04.06. 后继者 / 953. 验证外星语词典

    812. 最大三角形面积 2022.5.15 每日一题 题目描述 给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积. 示例: 输入: points = [[0,0],[0, ...

  7. 953. 验证外星语词典( 简单模拟 + 自定义定制排序 )

    文章目录 Question Ideas 1.Answer( Java ) - 自定义定制排序 Code 2.Answer( Java ) - 简单模拟 Code Question 953. 验证外星语 ...

  8. 题目:953.验证外星语词典

    ​ ​题目来源: leetcode题目,网址:953. 验证外星语词典 - 力扣(LeetCode) 解题思路: 遍历字符串,以连续两个为一组判断其是否符合外星语词典的字典序. 可以使用 int 数组 ...

  9. 力扣953. 验证外星语词典

    力扣953. 验证外星语词典 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 ...

最新文章

  1. 笔记精选(返回点赞总数和挑选笔记数量)
  2. python项目之网络聊天室_Python实现多人聊天室
  3. C# API中的模型和它们的接口设计
  4. 从Android的结构看HarmonyOS
  5. gprof + kprof + gprof2dot (性能 与 函数调用图)-
  6. Python 基础(常用数据结构)
  7. python学习实例(6)
  8. Hystrix面试 - 深入 Hystrix 断路器执行原理
  9. lamp php7.0,LAMP(Ubuntu16+PHP7.0)安装Wordpress
  10. ionic 父子组件传值
  11. 通信服务器系统安装,pxe网络安装操作系统
  12. Excel .net读取
  13. QSqlQueryModel结合QTreeView遇到的查询结果不显示的问题
  14. ffmpeg结构体以及函数介绍(一)
  15. JSP项目打开默认主页
  16. Flutter(十七) 实现国际化
  17. objectArx---AcGe几何类
  18. 拍卖行做VC,第一次出手就投了个Web3
  19. 调用MapReduce对文件中各个单词出现的次数进行统计
  20. 用pandas_profiling生成数据报告遇到的各种坑

热门文章

  1. 4.1.5卷积步长是什么意思
  2. 全新蒙迪欧主推2.3 定价将为18.98-22.98万
  3. 给电动车装遥控器来寻车的记录
  4. 最新版MinimogWP– 高转换电子商务 WordPress 主题免费下载
  5. 『赠书活动 | 第四期』《中文版AutoCAD 2022基础教程》
  6. excel2007 合并居中 成灰色,即无法使用合并居中功能问题
  7. 菜谱小程序源码免费分享【推荐】
  8. 百度2017暑期实习生编程钓鱼比赛
  9. python如何将dataframe转化为 想要的json格式
  10. 【matplotlib】3-绘制统计图形