9.1华为机试第二题,大佬看看为什么只过45

static Set<String> res = new HashSet<>();
    public static void main(String[] args) {
        Map<String, Set<String>> subClass = new HashMap<>();
        Map<String, Set<String>> instance = new HashMap<>();
        Scanner in = new Scanner(System.in);
        int k = Integer.parseInt(in.nextLine());
        for (int i = 0; i < k; i++) {
            String[] ss = in.nextLine().split(" ");
            if ("subClassOf".equals(ss[1])) {
                Set<String> set = subClass.getOrDefault(ss[2], new HashSet<>());
                set.add(ss[0]);
                subClass.put(ss[2], set);
            } else {
                Set<String> set =  instance.getOrDefault(ss[2], new HashSet<>());
                set.add(ss[0]);
                instance.put(ss[2], set);
            }
        }
        String a = in.nextLine();
        dfs(a, subClass, instance);
        if (res.isEmpty()) {
            System.out.println("empty");
            return;
        }
        List<String> r = new ArrayList<>(res);
        Collections.sort(r);
        for (int i = 0; i < r.size() -1; i++) {
            System.out.print(r.get(i));
            System.out.print(" ");
        }
        System.out.print(r.get(r.size() -1));
    }

    static void dfs(String s, Map<String, Set<String>> subClass, Map<String, Set<String>> instance) {
        res.addAll(instance.getOrDefault(s, new HashSet<>()));
        Set<String> set = subClass.get(s);
        if(set != null && !set.isEmpty())
        for (String a : set) {
            dfs(a, subClass, instance);
        }
    }

 
 
#华为机试##笔经##华为#
全部评论
我bfs过90
1 回复 分享
发布于 2021-09-02 01:23
一样的方法,DFS BFS都是45
点赞 回复 分享
发布于 2021-09-02 00:06
可能只考虑了a是b的子概念,没有考虑c是a的子概念,所以c是b的子子概念…我当时是这个问题调了就ac了
点赞 回复 分享
发布于 2021-09-02 09:44
bfs,dfs都可以,问题应该不在这上面。我没考虑set去重,用的list,bfs直接ac。
点赞 回复 分享
发布于 2021-09-02 11:44
我是java建树,也只过了45,但是今天hr说有200多分,不知道是不是后来算对了
点赞 回复 分享
发布于 2021-09-02 20:43
有多个空格的情况
点赞 回复 分享
发布于 2021-09-06 09:52

相关推荐

点赞 评论 收藏
分享
KPLACE:首先是板面看起来不够,有很多奖,比我厉害。项目要精减,大概详细描述两到三个,要把技术栈写清楚,分点,什么算法,什么外设,怎么优化,不要写一大堆,分点,你写上去的目的,一是让别人知道你做了这个知识点,然后在面试官技术面的时侯,他知道你会这个,那么就会跟你深挖这个,然后就是个人评价改为专业技能
点赞 评论 收藏
分享
评论
点赞
11
分享

创作者周榜

更多
牛客网
牛客企业服务