首页 > 试题广场 >

配置文件恢复

[编程题]配置文件恢复
  • 热度指数:110153 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

有6条配置命令,它们执行的结果分别是:

命   令 执   行
reset reset what
reset board board fault
board add where to add
board delete no board at all
reboot backplane impossible
backplane abort install first
he he unknown command

注意:he he不是命令。

为了简化输入,方便用户,以“最短唯一匹配原则”匹配(注:需从首字母开始进行匹配):

1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但匹配命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command

3、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果仍不唯一,匹配失败。
例如输入:r b,找到匹配命令reset board 和 reboot backplane,执行结果为:unknown command。
例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。

4、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果唯一,匹配成功。例如输入:bo a,确定是命令board add,匹配成功。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:b addr,无法匹配到相应的命令,所以执行结果为:unknow command。
6、若匹配失败,打印“unknown command”

注意:有多组输入。
数据范围:数据组数:,字符串长度
进阶:时间复杂度:,空间复杂度:

输入描述:

多行字符串,每行字符串一条命令



输出描述:

执行结果,每条命令输出一行

示例1

输入

reset
reset board
board add
board delet
reboot backplane
backplane abort

输出

reset what
board fault
where to add
no board at all
impossible
install first

JS解法(已AC)

// 命令输入
//let line = 'reset board'
while ((line = readline())) {
  let lines = line.split(' ')
  let command = ['reset', 'reset board', 'board add', 'board delete', 'reboot backplane', 'backplane abort']
  let dos = ['reset what', 'board fault', 'where to add', 'no board at all', 'impossible', 'install first']
  if (lines.length == 1) {
    if ('reset'.includes(lines[0])) {
      console.log(dos[0])
    } else {
      console.log('unknown command')
    }
  }
  if (lines.length == 2) {
    let indexx
    let flag = 0
    for (let i = 1; i < command.length; i++) {
      let com = command[i].split(' ')
      //   console.log(com)
      //   console.log(com[0].includes(lines[0]), com[1].includes(lines[1]))
      if (com[0].includes(lines[0]) && com[1].includes(lines[1])) {
        flag++
        indexx = i
      }
    }
    if (flag == 1) {
      console.log(dos[indexx])
    } else {
      console.log('unknown command')
    }
  }
}
发表于 2021-09-11 01:40:25 回复(0)
const arr1 = ["reset","reset board","board add","board delete","reboot backplane","backplane abort"]
const arr2 = ["reset what","board fault","where to add","no board at all","impossible","install first"]
let arr = [];
while(str = readline()){
    arr.push(str)
}
for(let i=0;i<arr.length;i++){
    if(arr1.indexOf(arr[i])>-1){
        let index = arr1.indexOf(arr[i])
        console.log(arr2[index])
    }else{
        console.log('unknown command')
    }
}
先将可能出现的命令和结果用数组保存起来,一一对应。主要的思想就是使用indexOf获取匹配命令的索引,利用索引将结果输出。
发表于 2020-10-02 08:20:29 回复(0)
let commands = [
    ["reset","reset what"],
    ["reset board","board fault"],
    ["board add","where to add"],
    ["board delete","no board at all"],
    ["reboot backplane","impossible"],
    ["backplane abort","install first"]]
function oneMatch(str,arr,type,i){
     let oneComArr = []
         let reg = new RegExp(`^${str}`,"g")
         if(i===2){
             reg = new RegExp(` ${str}`,"g")
         }
         arr.forEach(([comd,exec])=>{
             if(type==="one"){
                 if(co***tch(reg)&&comd.split(" ").length===1){//匹配只有1个关键词
                 oneComArr.push([comd,exec])
                 }
             }else{
                  if(co***tch(reg)){
                 oneComArr.push([comd,exec])
                 }
             }
             
         })
    if(oneComArr.length>0){
        oneComArr.sort((a,b)=>a[0].length-b[0].length)//排序指令字数少到多
        return oneComArr
    }else{
        return false
    }
}


while(line=readline()){
    let arr = line.split(" ")   
    if(arr.length===1){
        let res = oneMatch(arr[0],commands,"one",1)
        res?console.log(res[0][1]):console.log("unknown command")
    }else if(arr.length===2){
        let oneRes = oneMatch(arr[0],commands,"two",1)
        if(oneRes){ //第一个匹配了
            //匹配第二个
            let twoRes = oneMatch(arr[1],oneRes,"two",2)
            if(twoRes&&twoRes.length===1){
                console.log(twoRes[0][1])
            }else{
                console.log("unknown command")
            }
        }else{
            console.log("unknown command")
        }
    }else{
        console.log("unknown command")
    }
}
发表于 2020-09-23 17:14:54 回复(0)
var dic={
         'reset board':'board fault',
          'board add':'where to add',
          'board delet':'no board at all',
          'reboot backplane':'impossible',
          'backplane abort':'install first'
         };
function repair_config_file(str){
    var str=str;
    if(str.indexOf(' ')===-1){
        var key_words='reset';
        if(key_words.indexOf(str)!==-1){
            console.log('reset what');
        }else{
            console.log('unkown command');
        }
    }else{
        var arr=str.split(" ");
        var cm1=arr[0];
        var cm2=arr[1];
        var res=[];

        for(var key in dic){
            if(key.split(' ')[0].indexOf(cm1)!==-1&&key.split(' ')[1].indexOf(cm2)!==-1){
                res.push(dic[key]);
            }

        }
        if (res.length===0||res.length>1) {
            console.log('unkown command');
        }else{
            console.log(res[0]);
            }
    }
}

var line;
while(line=readline()){
    var input=line;
    repair_config_file(input);
}
发表于 2018-03-03 08:36:03 回复(0)