深信服笔试题

1.子串模糊匹配

var readline=require("readline");
rl=readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
var k=2;
var inputs=[];
rl.on("line",function(data){
    inputs.push(data);
    if(k==inputs.length){
        var a=inputs[0];
        var b=inputs[1];
        var result=main(a,b);
        console.log(result);
    }
})
function main(a,b){
   var reg=b.replace(/\?/g,"[a-z]{1,3}");
    var pattern=new RegExp("^"+reg);
    if(pattern.test(a)){
        var mat=pattern.exec(a);
        var val=(mat[0].length);
        return val;
    }
    else{
        return -1;
    }
}

2.长方体摆放

//设dp[i][j]为第i层,高度为j的方案数,那么第i+1层的高度为j+x j+y j+z的方案数都等于第i层的方案数,所以可以得出递推式为:
//dp[i+1][j+x]+=dp[i][j]
//dp[i+1][j+y]+=dp[i][j]
//dp[i+1][j+z]+=dp[i][j]
//再把高度为n的方案数加起来得出总和即可。
//为什么会有加号是因为有可能通过其他的方案已经得到了再加上自己的方案。
var readline=require("readline");
rl=readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
var k=2;
var inputs=[];
rl.on("line",function(data){
    inputs.push(data);
    if(k==inputs.length){
        var n=inputs[0];
        var nums=inputs[1].split(" ");
        var result=main(nums,n);
        console.log(result);
    }
})
function main(nums,n){
    //创建二维数组
    var x=parseInt(nums[0]);
    var y=parseInt(nums[1]);
    var z=parseInt(nums[2]);
    var val=parseInt(n);
    var db=new Array();
     for(var a=0;a<200;a++){
      db[a]=new Array();
     for(var b=0;b<300;b++){
       db[a][b]=0;
     }
   }
    db[1][x]=1;
    db[1][y]=1;
    db[1][z]=1;
    for(var i=2;i<200;i++){
            for(var j=0;j<300;j++){
                db[i][j+x]+=db[i-1][j];
                db[i][j+y]+=db[i-1][j];
                db[i][j+z]+=db[i-1][j];
            }
        }
        var sum=0;
        for(var i=0;i<200;i++){
            sum+=db[i][val];
        }
   return sum;
}

3.IP段合并70%

var readline=require("readline");
rl=readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
var inputs=[];
var num=0;
rl.on("line",function(data){
    if(num==0){
        num=Number(data);
    }else{
        inputs.push(data.split(" "));
        if(num==inputs.length){
            var result=main(num,inputs);
            for(let i=0;i<result.length;i++){
                console.log(result[i].join(" "))
            }
        }
    }
})
function main(num,inputs){
    let temp=0;
    let result=[];
    let son=[];
    let flag=1;
    for(let i=0;i<inputs.length;i++){
        for(let j=i+1;j<inputs.length;j++){
            if(parseInt(inputs[i][0])>parseInt(inputs[j][0]))
            {
               temp=inputs[i];
               inputs[i]=inputs[j];
               inputs[j]=temp;
            }
        }
    }
    while(inputs.length){
        if(inputs.length==1){
            result.push(inputs[0]);
            inputs.shift();
        }
        else if(parseInt(inputs[0][1])<parseInt(inputs[1][0])){
            result.push(inputs[0]);
            //console.log(result);
            inputs.shift();
        }
        else if(parseInt(inputs[0][0])>=parseInt(inputs[1][0])){
             son.push(inputs[1][0]);
             if(parseInt(inputs[0][1])<=parseInt(inputs[1][1]))
             {son.push(inputs[1][1])}
            else{son.push(inputs[0][1])}
             flag=2;
        }
        else {
            son.push(inputs[0][0]);
            if(parseInt(inputs[0][1])<=parseInt(inputs[1][1]))
            {son.push(inputs[1][1]);}
            else{son.push(inputs[0][1]);}
            flag=2;
        }
            if(flag==2)
            {
            inputs.shift();
            inputs.shift();
            inputs.unshift(son);
            son=[];
            flag=1;
            }
    }
     return result;
    //console.log(result);
}

查找重复序列//70%

var readline=require("readline");
rl=readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
var num=0;
var input_1=[];
var input_2=[];
var count=0;
rl.on("line",function(data){
    count++;
    if(num==0){
        num=Number(data);
    }
    else{
        if(count%2==0){
            input_1.push(data);
        }
        else{
            input_2.push(Number(data.split(" ").join("")));
        }
        if(num==input_2.length){
            var result=main(input_1,input_2);
            if(result.length==0) console.log("no");
            else
            {for(let k=0;k<result.length;k++){
                console.log(result[k].join(" "))
            }}
        }
    }
})
function main(input_1,input_2){
      var arrSet=new Set(input_2);
      var arrno=[...arrSet];
      var result=[];
      var son=[];
    for(let i=0;i<arrno.length;i++){
        for(let j=0;j<input_2.length;j++){
            if(arrno[i]==input_2[j]){
                son.push(j);
            }
        }
        result.push(son);
        son=[];
    }
    var fi=result.filter(function(item){
        if(item.length>1){return item}
    })
    return fi;
}

你可能感兴趣的:(深信服笔试题)