当前位置:网站首页>leetcode: 269. The Martian Dictionary
leetcode: 269. The Martian Dictionary
2022-08-05 00:20:00 【OceanStar's study notes】
题目来源
题目描述
现有一种使用英语字母的火星语言,这门语言的字母顺序与英语顺序不同.
给你一个字符串列表 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] 仅由小写英文字母组成
思路
思路
- 可以先根据word生成一张图
- 比较相邻两个words,Compare the two one by onewordscharacters in the same position,until you find a position where the first character is not the same
- Two characters in this position we can get valid information,That is, these two characters are therealien orderrelative order in
- It should be noted that this position is also useful,We can't get any information because of the different locations behind.
- Then look at topological sort,不能有环
举个例子
比如题目中给的例子1,There are sequential relationships that can be deduced
t->f
w->e
r->t
e->r
实现
class Solution {
public:
std::string alienOrder(vector<std::string>& words) {
if(words.empty()){
return "";
}
int N = words.size();
// Sets the in-degree of the characters that appear to be 0
// Letters that do not appear have an in-degree of -1,The in-degree of an occurrence of a letter is non-negative
std::map<char, int> indegree;
for (int i = 0; i < N; ++i) {
for(char ch : words[i]){
indegree[ch] = 0;
}
}
std::map<char, std::set<char>> graph;
for (int i = 0; i < N - 1; ++i) {
std::string curr = words[i];
std::string next = words[i + 1];
int len = std::min(curr.length(), next.length());
int j = 0;
for(;j < len; j++){
// # Save the first different character order,The letter in front is askey,The letters located at the back are storedsetas the value
if(curr[j] != next[j]){
if(!graph[curr[j]].count(next[j])){
graph[curr[j]].emplace(next[j]);
indegree[next[j]]++;
}
break;
}
}
// a The alphabetical order of b,then in the given dictionary a will appear first b 前面
if(j < curr.length() && j == next.length()){
return ""; //前面都一样,curcharacters are longer,next没有字符了----The dictionary given is not correct
}
}
std::queue<char> q;
for(auto it : indegree){
char key = it.first;
if(indegree[key] == 0){
q.push(key);
}
}
std::string ans;
while (!q.empty()){
char curr = q.front(); q.pop();
ans += curr;
if(graph.count(curr)){
for(char next : graph[curr]){
--indegree[next];
if(indegree[next] == 0){
q.push(next);
}
}
}
}
return ans.length() == indegree.size() ? ans : "";
}
};
测试
int main() {
std::vector<std::string> vec {
"wrt",
"wrf",
"er",
"ett",
"rftt"};
Solution a;
auto v = a.alienOrder(vec) ;
printf("%s\n", v.c_str());
return 1;
}
参考
边栏推荐
- 找不到DiscoveryClient类型的Bean
- redis可视化管理软件Redis Desktop Manager2022
- 软件测试面试题:系统测试的策略有?
- 3. Actual combat---crawl the result page corresponding to Baidu's specified entry (a simple page collector)
- typeScript - Partially apply a function
- tiup status
- Mysql based
- Couple Holding Hands [Greedy & Abstract]
- 进程间通信和线程间通信
- 2022牛客多校第三场 A Ancestor
猜你喜欢
leetcode: 266. All Palindromic Permutations
Getting started with 3D modeling for games, what modeling software can I choose?
仿网易云音乐小程序-uniapp
STC89C52RC的P4口的应用问题
【云原生--Kubernetes】Pod控制器
2022牛客暑期多校训练营5(BCDFGHK)
what?测试/开发程序员要被淘汰了?年龄40被砍到了32?一瞬间,有点缓不过神来......
机器学习(公式推导与代码实现)--sklearn机器学习库
matlab中rcosdesign函数升余弦滚降成型滤波器
3. Actual combat---crawl the result page corresponding to Baidu's specified entry (a simple page collector)
随机推荐
How to automatically push my new articles to my fans (very simple, can't learn to hit me)
[idea] idea configures sql formatting
LeetCode Hot 100
Mysql_14 存储引擎
2022牛客多校训练第二场 J题 Link with Arithmetic Progression
jenkins send mail system configuration
【云原生--Kubernetes】Pod控制器
.net(C#)获取两个日期间隔的年月日
Modelers experience sharing: model study method
First, the basic concept of reptiles
【unity编译器扩展之模型动画拷贝】
Chinese and Japanese color style
SQL association table update
进程间通信和线程间通信
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
tiup uninstall
【数据挖掘概论】数据挖掘的简单描述
【LeetCode】双指针题解汇总
GO中sync包自由控制并发的方法
软件测试面试题:负载测试、容量测试、强度测试的区别?