HJ66 配置文件恢复 – 三郎君的日常

Java基础 / 面试 · 2022年5月29日 0

HJ66 配置文件恢复

算法流程
  • 两个变量分别记录匹配成功的命令数量、匹配成功后在map的key
  • 分输入命令的长度,分情况遍历每个命令进行前缀的匹配
  • 匹配成功后更新两个变量
  • 最后判断匹配成功的次数,结果为1才表示匹配上
import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s=sc.nextLine();
            recover(s);
        }
    }
    public static void recover(String s){
        String[] strings = {"reset","reset board","board add","board delete","reboot backplane","backplane abort"};
        Map<String,String>map=new HashMap<>();
        map.put("reset","reset what");
        map.put("reset board","board fault");
        map.put("board add","where to add ");
        map.put("board delete","no board at all");
        map.put("reboot backplane","impossible");
        map.put("backplane abort","install first");
        String ERROR = "unknown command";
        String[] inputArr = s.split(" ");
        // 输入的命令长度为1
        if (inputArr.length==1){
            String input = inputArr[0];
            String cmd = strings[0].substring(0, input.length());
            if (cmd.equals(input)){
                System.out.println("reset what");
            }else {
                System.out.println(ERROR);
            }
        }else { 
        	// 匹配成功的命令数量
        	int count = 0;
            // 匹配成功后在map的key
            String key = "";
            // 穷举二字串的命令
            for (int i = 1 ; i < strings.length ; i++){
                String input1 = inputArr[0], input2 = inputArr[1];
                String command = strings[i];
                String[] cmd = command.split(" ");
                if (cmd.length==2){
                    String cmd1 = cmd[0], cmd2 = cmd[1];
                    // 输入的命令长度天长,不匹配该命令
                    if (cmd1.length() < input1.length() || cmd2.length() < input2.length()){
                        continue;
                    }
                    String s1 = cmd1.substring(0, input1.length());
                    String s2 = cmd2.substring(0, input2.length());
                    // 匹配前缀
                    if (s1.equals(input1) && s2.equals(input2)){
                    	// 匹配成功后的
                        key = command;
                        // 统计匹配成功的次数
                        count++;
                    }
                }
            }
            // 只能匹配成功一个
            if (count == 1){
                System.out.println(map.get(key));
            }else {
                System.out.println(ERROR);
            }
        }
    }

}