方法1: topological sort + bfs。这道题和210题思路一模一样,都是graph题,拓扑排序问题。一般来说拓扑排序问题可以分为以下三个步骤:
graph题里面还有一个很重要的点就是detect circle,这道题目关于这个点我还没搞得很清楚,复盘的时候记得搞清楚。这边我建议仔细阅读lc官方解答1,这个解答吧这个问题解释地非常清楚。
class Solution {
public String alienOrder(String[] words) {
Map<Character, List<Character>> adList = new HashMap<>();
Map<Character, Integer> counts = new HashMap<>();
for(String word : words){
for(char c : word.toCharArray()){
counts.put(c, 0);
adList.put(c, new ArrayList<>());
}
}
for(int i = 0; i < words.length - 1; i++){
String word1 = words[i];
String word2 = words[i + 1];
// check that word2 is not a prefix of word1
if(word1.length() > word2.length() && word1.startsWith(word2)){
return