1.构建图使用递归和回溯实现最长路径通过100%public class Solution { public String LongestBehaviorPath (String[] paths) { Map<String,List<String>> graph = new HashMap<>(); Map<String,Integer> indegree = new HashMap<>(); for(String path : paths){ String []steps = path.split(&quot;->&quot;); for(int i = 0;i<steps.length-1;i++){ graph.putIfAbsent(steps[i],new ArrayList<>()); graph.get(steps[i]).add(steps[i+1]); indegree.put(steps[i+1],indegree.getOrDefault(steps[i+1],0)+1); indegree.putIfAbsent(steps[i],0); } } List<String> startNodes = new ArrayList<>(); for(String node:indegree.keySet()){ if(indegree.get(node) == 0){ startNodes.add(node); } } List<String> longestPath = new ArrayList<>(); for(String start : startNodes){ dfs(start,new ArrayList<>(),graph,longestPath); } return String.join(&quot;->&quot;,longestPath); } private static void dfs(String node,List<String> path,Map<String,List<String>> graph,List<String> longestPath){ path.add(node); if(path.size()> longestPath.size()){ longestPath.clear(); longestPath.addAll(new ArrayList<>(path)); } if(graph.containsKey(node)){ for(String neighbor: graph.get(node)){ dfs(neighbor,path,graph,longestPath); } } path.remove(path.size() - 1); }}2.求逆值对双重for循环遍历比较通过100%