题解 | 配置文件恢复

配置文件恢复

https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 1. 建立命令与结果的映射关系
        // Key: 命令字符串, Value: 执行结果
        Map<String, String> commandMap = new HashMap<>();
        commandMap.put("reset", "reset what");
        commandMap.put("reset board", "board fault");
        commandMap.put("board add", "where to add");
        commandMap.put("board delete", "no board at all");
        commandMap.put("reboot backplane", "impossible");
        commandMap.put("backplane abort", "install first");

        Scanner scanner = new Scanner(System.in);

        // 2. 循环处理多组输入,直到没有更多输入
        // scanner.hasNextLine() 会等待并检查是否有下一行输入
        while (scanner.hasNextLine()) {
            String input = scanner.nextLine().trim(); // 读取一行并去除首尾空格

            // 如果输入为空行,则跳过
            if (input.isEmpty()) {
                continue;
            }

            // 3. 将输入按空格分割成关键字数组
            // 使用 split("\\s+") 可以分割一个或多个连续的空格
            String[] parts = input.split("\\s+");

            // 4. 根据关键字数量进行匹配
            String result = "unknown command"; // 默认结果为未知命令
            if (parts.length == 1) {
                // 处理一个关键字的情况
                result = findMatch(commandMap, parts[0], null);
            } else if (parts.length >= 2) {
                // 处理两个或多个关键字的情况(我们只关心前两个)
                result = findMatch(commandMap, parts[0], parts[1]);
            }

            // 5. 输出最终结果
            System.out.println(result);
        }

        scanner.close();
    }

    /**
     * 根据输入的关键字查找唯一匹配的命令
     * @param commandMap 命令库
     * @param key1 第一个关键字
     * @param key2 第二个关键字 (如果只有一个关键字,则为 null)
     * @return 命令的执行结果,或 "unknown command"
     */
    private static String findMatch(Map<String, String> commandMap, String key1,
                                    String key2) {
        List<String> candidates = new ArrayList<>();

        // 遍历命令库中的每一个命令
        for (String cmd : commandMap.keySet()) {
            // 将命令按空格分割成单词
            String[] cmdWords = cmd.split(" ");

            if (key2 == null) {
                // --- 场景一:用户只输入了一个关键字 ---
                // 规则:必须匹配只有一个单词的命令
                if (cmdWords.length == 1) {
                    // 检查命令的单词是否以输入的关键字开头
                    if (cmdWords[0].startsWith(key1)) {
                        candidates.add(cmd); // 加入候选列表
                    }
                }
            } else {
                // --- 场景二:用户输入了两个关键字 ---
                // 规则:必须匹配有两个单词的命令
                if (cmdWords.length == 2) {
                    // 检查命令的第一个单词是否以第一个关键字开头,
                    // 并且第二个单词是否以第二个关键字开头
                    if (cmdWords[0].startsWith(key1) && cmdWords[1].startsWith(key2)) {
                        candidates.add(cmd); // 加入候选列表
                    }
                }
            }
        }

        // 根据候选列表的大小决定最终结果
        if (candidates.size() == 1) {
            // 唯一匹配,返回该命令对应的结果
            return commandMap.get(candidates.get(0));
        } else {
            // 没有匹配或匹配不唯一
            return "unknown command";
        }
    }
}

全部评论

相关推荐

在看牛客的社畜很积极:身高体重那一行信息去掉,学校那一行的信息放上面,找半天都没找到你是哪个学校什么专业的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务