力扣解法汇总-剑指 Offer II 114. 外星文字典
目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣
描述:
现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。
给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。
请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序 排列。若不存在合法字母顺序,返回 "" 。若存在多种可能的合法字母顺序,返回其中 任意一种 顺序即可。
字符串 s 字典顺序小于 字符串 t 有两种情况:
在第一个不同字母处,如果 s 中的字母在这门外星语言的字母顺序中位于 t 中字母之前,那么 s 的字典顺序小于 t 。
如果前面 min(s.length, t.length) 字母都相同,那么 s.length < t.length 时,s 的字典顺序也小于 t 。
示例 1:
输入:words = ["wrt","wrf","er","ett","rftt"]
输出:"wertf"
示例 2:
输入:words = ["z","x"]
输出:"zx"
示例 3:
输入:words = ["z","x","z"]
输出:""
解释:不存在合法字母顺序,因此返回 "" 。
提示:
1 <= words.length <= 100
1 <= words[i].length <= 100
words[i] 仅由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/Jf1JuT
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
* 解题思路: * 这题困难题,时间问题没有完成,只是想了个大体思路写了一下。 * 先通过递归的方式,找出其所有的依赖关系。比如a在b前面,则a的HashSet中添加b。 * 这样最终得出的所有的依赖。 * 然后通过拓扑排序 + 深度优先搜索进行搜索,从而推导出正确的字符串。
代码:
public class Solution114 {//未完成的public String alienOrder(String[] words) {HashSet<Character>[] sets = new HashSet[26];for (int i = 0; i < 26; i++) {sets[i] = new HashSet<>();}searchRely(0, Arrays.asList(words), sets);return "";}private void searchRely(int index, List<String> words, HashSet<Character>[] sets) {if (words.size() == 0) {return;}char lastChar = 0;ArrayList<String> newList = new ArrayList<>();for (int i = 0; i <= words.size(); i++) {if (i == words.size()) {searchRely(index + 1, newList, sets);break;}String str = words.get(i);char c = str.charAt(index);if (lastChar == 0) {lastChar = c;newList.add(str);continue;}if (c != lastChar) {sets[c - 'a'].add(lastChar);lastChar = c;searchRely(index + 1, newList, sets);newList.clear();} else {newList.add(str);}}}
}
力扣解法汇总-剑指 Offer II 114. 外星文字典相关推荐
- 剑指 Offer II 114. 外星文字典(困难 图 bfs 哈希表 拓扑排序 字符串 数组)
剑指 Offer II 114. 外星文字典 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同. 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按 ...
- LeetCode每日一题(2022/5/31)剑指 Offer II 114. 外星文字典(困难)
现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同. 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 . 请你根据该 ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
<LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...
- 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java
<LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...
- 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java
<LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...
- 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java
<LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...
- 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java
<LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...
- 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
<LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...
最新文章
- pat 团体赛练习题集 L2-008. 最长对称子串
- POJ1088 滑雪题解+HDU 1078(记忆化搜索DP)
- Sharepoint学习笔记 –架构系列—10 Sharepoint的服务器端对象模型(Server Object Model) 2.内容层次结构
- java连接ftp一直阻塞
- idea2020代码el组件红色波浪线_Android实现炫酷的ViewPager3D组件
- cut out数据增强_ChIP-Seq数据分析(PE型)
- ucenter词语过滤原理
- APUE学习笔记-守护进程的创建
- latex 调整表格的行高_latex 表格如何控制行高,行距,行与行之间的距离
- linux虚拟机安装samba服务,在虚拟机Redhat Linux下安装Samba服务器分享
- ClickHouse常用sql语句
- 程序员一般可以从什么平台接私活?
- RRD原理(转载的)
- Excel学习日记:L18-CountifsSumifs函数
- python fields函数_Python函数详解
- Unity3D 鼠标选择物体高光显示信息
- linux按目录名查找目录_如何在Linux中查找目录?
- 发布订阅模式,在工作中它的能量超乎你的想象
- LoadRunner之并发用户数与迭代关系---并发数与迭代的区别
- 招商银行 支付 ECSHOP php shopex
热门文章
- MATLAB算法实战应用案例精讲-【图像处理】数字图像海报化(附Java、python、matlab和R语言代码实现)
- c语言cls为什么没起作用,c语言的“clsquot;是什么意思
- 分析NFS的16个组成员身份的限制的过程
- WebService客户端设计期TClientDataSet.ProviderName无值解决
- TIKTOK跨境:中国式养生风靡TikTok
- Domino系统组织名称、域名迁移
- 2021年起重机司机(限桥式起重机)最新解析及起重机司机(限桥式起重机)模拟考试
- 盘点2015全球物联网年度重大事件
- 重磅 | 美格智能发布新一代5G CPE解决方案,构建大带宽5G FWA连接
- HTML+CSS 实现商品图片列表放大视觉效果 复制完整代码即可马上调用