每日一题做题记录,参考官方和三叶的题解

目录

  • 题目要求
    • 阅读理解
  • 思路一:模拟
    • Java
    • C++
  • 思路二:自定义排序
    • Java
    • C++
  • 总结

题目要求

阅读理解

【明明是简单题结果读了好久没懂题目……】
判断给出的单词是不是按照字典序依次排列,而不是判断单词本身内部……解释起来好智障,咋就给自己绕进去半天……

思路一:模拟

  • 先用数字形式存下来字典;
  • 然后逐个单词逐位比较是否按字典序排列就好。

Java

class Solution {int[] dic = new int[26];int check(String a, String b) {int n = a.length(), m = b.length();int i = 0, j = 0;while(i < n && j < m) {int ca = a.charAt(i) - 'a', cb = b.charAt(i) - 'a';if(ca != cb)return dic[ca] - dic[cb];i++;j++;}if(i < n) // a比较长return 1;if(j < m) // b比较长return -1;return 0;}public boolean isAlienSorted(String[] words, String order) {for(int i = 0; i < 26; i++)this.dic[order.charAt(i) - 'a'] = i;int n = words.length;for(int i = 1; i < n; i++)if(check(words[i - 1], words[i]) > 0) // 即前大于后return false;return true;}
}
  • 时间复杂度:O(∑i=0n−1words[i])O(\sum^{n-1}_{i=0}words[i])O(∑i=0n−1​words[i])
  • 空间复杂度:O(C)O(C)O(C)

C++

class Solution {int dic[26];
public:int check(string a, string b) {int n = a.size(), m = b.size();int i = 0, j = 0;while(i < n && j < m) {int ca = a[i] - 'a', cb = b[j] - 'a';if(ca != cb)return dic[ca] - dic[cb];i++;j++;}if(i < n) // a比较长return 1;if(j < m) // b比较长return -1;return 0;}bool isAlienSorted(vector<string>& words, string order) {for(int i = 0; i < 26; i++)dic[order[i] - 'a'] = i;int n = words.size();for(int i = 1; i < n; i++)if(check(words[i - 1], words[i]) > 0) // 即前大于后return false;return true;}
};
  • 时间复杂度:O(∑i=0n−1words[i])O(\sum^{n-1}_{i=0}words[i])O(∑i=0n−1​words[i])
  • 空间复杂度:O(C)O(C)O(C)

思路二:自定义排序

  • 重写排序函数,然后对给出的单词进行排序;
  • 排序结果和给出的对比是否一样。
  • 其实核心思路和上面一样,拉出来单独比较。

Java

class Solution {public boolean isAlienSorted(String[] words, String order) {int[] dic = new int[26];for(int i = 0; i < 26; i++)dic[order.charAt(i) - 'a'] = i;String[] alienSort = words.clone();Arrays.sort(alienSort, (a, b) -> {int n = a.length(), m = b.length();int i = 0, j = 0;while(i < n && j < m) {int ca = a.charAt(i) - 'a', cb = b.charAt(j) - 'a';if(ca != cb)return dic[ca] - dic[cb];i++;j++;}if(i < n) // a比较长return 1;if(j < m) // b比较长return -1;return 0;});int n = words.length;for(int i = 0; i < n; i++)if(!alienSort[i].equals(words[i]))return false;return true;}
}
  • 时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)
  • 空间复杂度:O(log⁡n)O(\log n)O(logn)

C++

sort函数调用的this调了好久,感觉要好好看看sort里重写函数的方法】

class Solution {public:int dic[26];bool isAlienSorted(vector<string>& words, string order) {for(int i = 0; i < 26; i++)dic[order[i] - 'a'] = i;vector<string> alienSort = words;sort(alienSort.begin(), alienSort.end(), [this](const string &a, const string &b) {int n = a.size(), m = b.size();int i = 0, j = 0;while(i < n && j < m) {int ca = a[i] - 'a', cb = b[j] - 'a';if(ca != cb)return dic[ca] - dic[cb] <= 0;i++;j++;}return a.size() <= b.size(); // b长正确,a长就反了,});int n = words.size();for(int i = 0; i < n; i++)if(alienSort[i] != words[i])return false;return true;}
};
  • 时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)
  • 空间复杂度:O(log⁡n)O(\log n)O(logn)

总结

读懂题目用了半天……以为他说单个单词内部满足字典序……

读懂题之后感觉还是名副其实简单题的,逐位比较就好了,就是需要注意记录字典的方式。

【这几天好down哦,越忙碌越down,要赶紧调整心态哦】

欢迎指正与讨论!

JavaC++题解与拓展——leetcode953.验证外星语【么的新知识】相关推荐

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

    题目大意 这道题是,从前往后,两两比较两个单词,如果首字母满足order顺序,则true,如果不满足,就对应位置一一比较,直到出现prev < curr -> true或者prev > ...

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

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

  3. 有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列

    有效的括号 来源:杭哥 20. 有效的括号 - 力扣(LeetCode) bool isValid(char * s) {int sz=strlen(s);char stack[sz];int k=0 ...

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

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

  5. 哈希表题目:验证外星语词典

    文章目录 题目 标题和出处 难度 题目描述 要求 示例 数据范围 解法 思路和算法 代码 复杂度分析 题目 标题和出处 标题:验证外星语词典 出处:953. 验证外星语词典 难度 3 级 题目描述 要 ...

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

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

  7. 953. 验证外星语词典

    力扣打卡:953. 验证外星语词典 解题思路 思路 使用HashMap统计字典的顺序 从头开始,每次只比较两个字符串 循环比较,最后得到结果 解释 每次比较两个字符串,只有两种情况 从头开始比较字符 ...

  8. LeetCode 953. 验证外星语词典

    验证外星语词典 某种外星语也使用英文小写字母,但可能顺序 order (order.length==26)(order.length == 26)(order.length==26)不同.字母表的顺序 ...

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

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

  10. 验证外星语词典(2022-5-17)每日一练

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

最新文章

  1. Symfony笔记之--控制器的快捷方法
  2. 柯南变声器的算法实现原理
  3. 云原生存储项目ROOK
  4. netflix_学习Netflix管理员–第2部分
  5. Python应用实战-Clumper | dplyr式的Python数据操作包
  6. uni-app的事件传参
  7. 初学Reporting Service2008
  8. 批量ping IP并检测IP延迟率和丢包率脚本
  9. 《HTML与CSS入门经典(第8版)》——第2章 发布Web内容2.1 创建用于本章的示例文件...
  10. (转)嘉信理财再度全面降佣,它会否成为投资界的Amazon?
  11. 从零实现一个3D目标检测算法(1):3D目标检测概述
  12. Tomcat:Tomcat网站上的core和deployer的区别
  13. web前端网页设计期末课程大作业:企业网页主题网站设计——舞蹈培训11页HTML+CSS+JavaScript
  14. 二维数组和二维数组名
  15. Springboot项目搭建有ftpClientPool的Ftp工具类
  16. 崩坏3九游服务器稳定吗,为什么崩坏三萌新入坑推荐选择官服而非渠道服,盘点几个必要的理由...
  17. Java虚拟机学习与总结(一)
  18. Linux之截图快捷键
  19. Python编写今日头条文章爬虫,轻松发布!
  20. 小米路由器 校园网设置

热门文章

  1. 记一次HDD(机械硬盘)突然出故障,然后数据恢复以及更换HDD的过程
  2. linux rpm与deb 区别,rpm与deb的区别
  3. 兜兜转转,Image图片转换成PDF还是这款工具靠谱
  4. 业务流程图是什么?怎么画?
  5. 任务管理器被管理员停用怎么办
  6. web前端设计与开发期末作品:旅游网站设计——响应式的出国旅游定制(17页) HTML+CSS+JavaScript 旅游网页html 旅游景点html...
  7. 转:著名的100个管理定律点评6 -- 决策(上)
  8. 光耦参数理解(转载)
  9. 微信群-街边二维码别乱扫-这些传销陷阱要当心骗局
  10. linux下find命令的详细说明