Font-end(编程题)

来源:互联网 发布:还珠格格知画 编辑:程序博客网 时间:2024/05/21 02:51

1、给的用例正确么?

2、自己的用例正确么?

3、输出的格式正确么?

> print的地方要注意!

4、输入的数据正确么?

> 给的“length”一般在录入时候的for会用到;> 不要依赖 while(…)

0、有效的括号匹配

8种,“{ } [ ] < > ( )”

//首先先定义不同类型的匹配原则,如 (匹配),【匹配】,{匹配}。再借助栈,遇到左括号则入栈,遇到右括号则比较它和栈顶括号的类型,要是不匹配则终止返回错误,要是匹配则将栈顶元素出栈,继续往字符串右边走,接着入栈或是判断。一直到走到字符串的尾部,且栈为空,则返回正确var input = parens.split('');var arr = [];for(var i=0; i<input.length; i++){    if( (input[i]=='{') || (input[i]=='[') || (input[i]=='<') || (input[i]=='(')){        arr.push(input[i]);    } else {        var str = arr.pop();        if(input[i] == '}'){            if(str != '{'){                return false;            }        }        if(input[i] == ')'){            if(str != '('){                return false;            }        }        if(input[i] == '>'){            if(str != '<'){                return false;            }        }        if(input[i] == ']'){            if(str != '['){                return false;            }        }    }}    if(arr.length==0){        return true;    } else {        return false;    }

0、(2018美团校招)

设定密码的严密性:
1、长度不能小于8;
2、不能数字开头;
3、只能由数字、小写字母、大写字母组成;
3、必须是数字、小写字母、大写字母其中至少两种组合;

var reg1=/^[A-Za-z0-9]+$/;//var reg2=/^[0-9]/;var reg3a = /^(?!(?:\d+|[a-z]+)$)[\da-z]{8,}$/;var reg3b = /^(?!(?:\d+|[A-Z]+)$)[\dA-Z]{8,}$/;var reg3c = /^(?!(?:[a-z]+|[A-Z]+)$)[a-zA-Z]{8,}$/;var reg3d = /^(?!(?:[\da-z]+|[A-Z]+)$)[\da-zA-Z]{8,}$/;var str = "0988763333333";if(str.length>=8){    if(reg1.test(str)){         if(!reg2.test(str)){            if(reg3a.test(str)||reg3b.test(str)||reg3c.test(str)||reg3d.test(str)){                console.log ('YES');            }        }    }}                 console.log('NO');

0、(2018网易校招)

如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。 

输入描述:
输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含’0’和’1’

输出描述:
输出一个整数,表示最长的满足要求的子串长度。

输入例子1:
111101111

输出例子1:
3
我的答案(js V8.6):

while(line=readline()){    var lines = line.split('');    var arr   = [];    for(var i=0;i<lines.length;i++){        arr[i] = parseInt(lines[i]);    }      var result = jiaocuo(arr);    print(result);}function jiaocuo(arr){    var count = new Array(arr.length);    for(var i = 0 ;i < count.length ; i++){        count[i] = 1;    }    for(var i = 0 ;i < arr.length - 1 ;i++){        for(var j = i; j < arr.length-1 ; j++){            if(arr[j] + arr[j+1] == 1){                count[i]++;            } else {                break;            }        }    }    return bubble(count);}function bubble(arr){    for(var i = 0 ; i < arr.length ; i++){        for(var j = 0 ; j < arr.length - i ; j++){            if(arr[j] > arr[j+1]){                var temp = arr[j];                arr[j]   = arr[j+1];                arr[j+1] = temp;            }        }    }    return arr[arr.length-1];}

思路:当时没做出来,原因可能是太紧张,而且也没做过编程题,真不该

刚洗完澡就想出来了:
1、用split(“”),可以将 “字符串” —> “字符数组”arr;
2、创建一个和arr同长度count数组,统计对应idx下的交错长度;
3、判断 arr[j] + arr[j+1] == 1?就行了


1、用JS求出两个字符串的最长公共子序列(长度)?

function search(){    var s1 = "abc";    var s2 = "abdfe";    //用substr(startIdx,length)、indexOf()>=0来解    //用j代表长度    var L1 = s1.length;    for(var j = L1 ; j > 0 ; j--){        //用i代表 起始坐标        for(var i = 0 ; i <= L1-j ; i++){            var str = s1.substr(i,j);            if(s2.indexOf(str) != -1){                return str;            }         }    }    return "";}

上面代码不够准确,因为若s1比s2长,就不行了,这时候需要调换s1、s2。

function search(){    var s1 = "abc";    var s2 = "abdfe";    if(s1.length > s2.length){        var s3 = s1;            s1 = s2;            s2 = s3;    }    var L1 = s1.length;    for(var j = L1 ; j > 0 ; j--){        for(var i = 0 ; i <= L1-j ; i++){            var str = s1.substr(i,j);            if(s2.indexOf(str) != -1){                return str;            }        }    }    return "";}

2、

这里写图片描述

基本思路:
1、基于这些展示品的父容器(elem),创建一个矩形对象

elem.getBoundingClientRect();

2、获得这个父容器最终被应用到的样式规则:

getComputedStyle(elem,null);

3、创建“遮罩层”div节点

var mask = document.createElement('div');

4、设置这个“遮罩层”div节点的style

mask.style.position、mask.style.left、mask.style.top、mask.style.zIndex、mask.style.opacity、mask.style.backgroundColor、mask.style.width、mask.style.height

5、父容器(elem)的再上一层父容器(elem.parentNode),插入子节点(mask)

elem.parentNode.appendChild(mask);

6、获得父容器(id为target)

var target = document.getElementById('target');addMask(target);

3、下面这段代码想要循环延时输出结果0 1 2 3 4,请问输出结果是否正确,如果不正确,请说明为什么,并修改循环内的代码使其输出正确结果

for(var i = 0 ; i < 5 ; i++){    setTimeout(function(){        console.log(i + ' ');    },100);}

是错的,因为setTimeout的参数函数通过闭包访问变量i,js运行环境是单线程,setTimeout注册的函数需要等待线程空闲才能执行,但这时候for循环已结束(i = 5)。
正确办法:

for(var i = 0 ; i < 5 ; i++){    (function(idx){        setTimeout(function(){            console.log(idx + ' ');        },100);    })(i);}
原创粉丝点击