JavaC++题解与拓展——leetcode953.验证外星语【么的新知识】
每日一题做题记录,参考官方和三叶的题解 |
目录
- 题目要求
- 阅读理解
- 思路一:模拟
- 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−1words[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−1words[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(nlogn)O(n\log n)O(nlogn)
- 空间复杂度:O(logn)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(nlogn)O(n\log n)O(nlogn)
- 空间复杂度:O(logn)O(\log n)O(logn)
总结
读懂题目用了半天……以为他说单个单词内部满足字典序……
读懂题之后感觉还是名副其实简单题的,逐位比较就好了,就是需要注意记录字典的方式。
【这几天好down哦,越忙碌越down,要赶紧调整心态哦】
欢迎指正与讨论! |
JavaC++题解与拓展——leetcode953.验证外星语【么的新知识】相关推荐
- leetcode---953. 验证外星语词典
题目大意 这道题是,从前往后,两两比较两个单词,如果首字母满足order顺序,则true,如果不满足,就对应位置一一比较,直到出现prev < curr -> true或者prev > ...
- 题目:953.验证外星语词典
题目来源: leetcode题目,网址:953. 验证外星语词典 - 力扣(LeetCode) 解题思路: 遍历字符串,以连续两个为一组判断其是否符合外星语词典的字典序. 可以使用 int 数组 ...
- 有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列
有效的括号 来源:杭哥 20. 有效的括号 - 力扣(LeetCode) bool isValid(char * s) {int sz=strlen(s);char stack[sz];int k=0 ...
- 953. 验证外星语词典( 简单模拟 + 自定义定制排序 )
文章目录 Question Ideas 1.Answer( Java ) - 自定义定制排序 Code 2.Answer( Java ) - 简单模拟 Code Question 953. 验证外星语 ...
- 哈希表题目:验证外星语词典
文章目录 题目 标题和出处 难度 题目描述 要求 示例 数据范围 解法 思路和算法 代码 复杂度分析 题目 标题和出处 标题:验证外星语词典 出处:953. 验证外星语词典 难度 3 级 题目描述 要 ...
- LeetCode 812. 最大三角形面积(再次用到凸包的Andrew算法) / 面试题 04.06. 后继者 / 953. 验证外星语词典
812. 最大三角形面积 2022.5.15 每日一题 题目描述 给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积. 示例: 输入: points = [[0,0],[0, ...
- 953. 验证外星语词典
力扣打卡:953. 验证外星语词典 解题思路 思路 使用HashMap统计字典的顺序 从头开始,每次只比较两个字符串 循环比较,最后得到结果 解释 每次比较两个字符串,只有两种情况 从头开始比较字符 ...
- LeetCode 953. 验证外星语词典
验证外星语词典 某种外星语也使用英文小写字母,但可能顺序 order (order.length==26)(order.length == 26)(order.length==26)不同.字母表的顺序 ...
- 力扣953. 验证外星语词典
力扣953. 验证外星语词典 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 ...
- 验证外星语词典(2022-5-17)每日一练
953. 验证外星语词典 (2022-5-17) 某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words, ...
最新文章
- Symfony笔记之--控制器的快捷方法
- 柯南变声器的算法实现原理
- 云原生存储项目ROOK
- netflix_学习Netflix管理员–第2部分
- Python应用实战-Clumper | dplyr式的Python数据操作包
- uni-app的事件传参
- 初学Reporting Service2008
- 批量ping IP并检测IP延迟率和丢包率脚本
- 《HTML与CSS入门经典(第8版)》——第2章 发布Web内容2.1 创建用于本章的示例文件...
- (转)嘉信理财再度全面降佣,它会否成为投资界的Amazon?
- 从零实现一个3D目标检测算法(1):3D目标检测概述
- Tomcat:Tomcat网站上的core和deployer的区别
- web前端网页设计期末课程大作业:企业网页主题网站设计——舞蹈培训11页HTML+CSS+JavaScript
- 二维数组和二维数组名
- Springboot项目搭建有ftpClientPool的Ftp工具类
- 崩坏3九游服务器稳定吗,为什么崩坏三萌新入坑推荐选择官服而非渠道服,盘点几个必要的理由...
- Java虚拟机学习与总结(一)
- Linux之截图快捷键
- Python编写今日头条文章爬虫,轻松发布!
- 小米路由器 校园网设置
热门文章
- 记一次HDD(机械硬盘)突然出故障,然后数据恢复以及更换HDD的过程
- linux rpm与deb 区别,rpm与deb的区别
- 兜兜转转,Image图片转换成PDF还是这款工具靠谱
- 业务流程图是什么?怎么画?
- 任务管理器被管理员停用怎么办
- web前端设计与开发期末作品:旅游网站设计——响应式的出国旅游定制(17页) HTML+CSS+JavaScript 旅游网页html 旅游景点html...
- 转:著名的100个管理定律点评6 -- 决策(上)
- 光耦参数理解(转载)
- 微信群-街边二维码别乱扫-这些传销陷阱要当心骗局
- linux下find命令的详细说明