卷面介绍
笔试题型是:10个选择题、3个算法编程题、1个前端编程题(一共100分钟)
选择题知识点包括有 c基础、html、css、js、http状态码,不能脱离笔试页面。
算法题编程语言限定 Typescript,但是js的语法都能用,可以用IDE。
前端题需要你直接手撸一个选择器,参考ElementUI的创建条目输入选择器版,当然功能和这个还是有很大不同。不能用IDE。
前言
js基础不是很好,思路都是按c语言来的。有啥可以改进的地方,请指大佬在评论区指出就行。
第一题
题干
判断字符串是否是回文串,只识别数字和字母(不区分大小写)。
输入样例
'a.bc1 21cb,A'
输出样例
true
分析
1、识别回文串
2、只识别数字和字母
3、不区分大小写
实现代码
// c语言中 大写字母+32==小写字母 // 但是js中无法这样做或者说我不会 单字符与ascii码 的相互转化 // 因为不会大小写转化手撸了一个映射表 const cList={ 'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'I', 'm': 'M', 'n': 'N', 'o': 'O', 'p': 'P', 'q': 'Q', 'r': 'R', 's': 'S', 't': 'T', 'u': 'U', 'v': 'V', 'w': 'W', 'x': 'X', 'y': 'Y', 'z': 'Z', 'A': 'A', 'B': 'B', 'C': 'C', 'D': 'D', 'E': 'E', 'F': 'F', 'G': 'G', 'H': 'H', 'I': 'I', 'J': 'J', 'K': 'K', 'L': 'I', 'M': 'M', 'N': 'N', 'O': 'O', 'P': 'P', 'Q': 'Q', 'R': 'R', 'S': 'S', 'T': 'T', 'U': 'U', 'V': 'V', 'W': 'W', 'X': 'X', 'Y': 'Y', 'Z': 'Z', } function verify(param){ // write code here let str=param.match(/[0-9a-zA-Z]+/g).join('')// 正则提取字符和数字再拼接 let l=str.length for(let i=0;i<l/2;i++){ // 先做大小写判断 if(cList[str[i]] == cList[str[l-i-1]] && cList[str[l-i-1]]!=undefined){ ; } // 在识别数字 else if(str[i] == str[l-i-1]){ ; } // 遇到无法匹配项则返回false else{ return false } } return true }
第二题
题干
有三个数字数组,求每个数组中的最大值,并将这三个值降序排列作为一个数组返回。
输入样例
[12, 23, 45], [374, 356, 10, 889], [156, 34]
输出样例
[889, 156, 45]
分析
1、先求三个数组的最大值
2、降序排列三个最大值
// 这里图省事和时间就全用sort排序了,为了效率求最大值可以遍历求 function max(a, b, c){ let func = function(a, b){ return b-a } a.sort(func) b.sort(func) c.sort(func) return [a[0], b[0], c[0]].sort(func) }
第三题
题干
有一个只包含数字的字符串(length<=12),对其进行3次分割,求其所有可以划分为IP地址的可能,并返回其划分ip地址的数组。
输入样例
'25525511135'
输出样例
['255.255.11.135', '255.255.111.35']
分析
1、先做分割
2、判断分割是否是有效ip
// 发现对每个样例最多只要做3*3*3=27次分割就行了,所以直接暴力 // 本来想用正则 [0-255] 来识别的,但是忘记[]的范围只能0~99之间 // 所以只能自己写个判断 function getIp(str) { let time = 0 let list = [] let l = str.length // 直接暴力分割 for(let i=1;i<4;i++) { for(let j=i+1;j<i+4;j++) { for(let k=j+1;k<j+4;k++) { let a=str.slice(0, i) let b=str.slice(i, j) let c=str.slice(j, k) let d=str.slice(k, l) if(check(a) && check(b) && check(c) && check(d)) list.push(a+'.'+b+'.'+c+'.'+d) } } } return list } // 判断是否是0~255之间的字符串 function check(s){ let n = parseInt(s) if(n+'' != s){// 排除前导0的情况 return false } if(n>=0 && n<=255){ return true } return false }
反思
第一次笔试,不知道题型和编程语言。所以结果就过了大概7个选择题+2个算法题。肯定是没戏了。做完三个算法题就把时间花完了,没分配时间写前端题了。
最近准备考研了,所以确实心思不在这边了;又因为自学所以基础不牢,很多方法都不会用,比如大小写转化的toUpperCase()和toLowerCase()。考的题基本在LeeCode都有原题只能怪自己花的时间少了。
提醒后面来笔试的前端同学好好刷力扣和牛客的题,还是很有用的。
全部评论
(6) 回帖