9.14 小米前端笔试
一题没a,66%跟55%!看着不难,怎么坑这么多啊。
第一题:最长公共前缀,没有返回""(空字符串) 真不知道自己哪里错了
例子:['flower','flo','flowee'] 输出:'flo'
思路:先排序,然后以第一个元素的字符串开始 遍历所有字符串相同位置,相同则加上这个位置的字符,不相同就返回已经累加的字符。
var sameHead = function (strs) { // ['flower','flow','flight'] if(strs.length==1){ return strs[0] } strs.sort((a,b)=>a.length-b.length) let len = strs[0].length let str = "" for(let i=0;i<len;i++){ let j=0 while(j<strs.length){ if(strs[j][i]!=strs[0][i]){ return str } j++ } str+=strs[0][i] } return str }
第二题,打印机,从任意位置开始打印到任意位置结束,每次打印一个字符(小写字母),会覆盖原来位置的字符。返回最小需要打印的次数
输入:‘aaabbb’ 输出:2次 先打印满的a,再从3号位开始打印b
思路:以每个字符为基准,遍历轮训一遍,先去重获取字符串内的字符,再以第一个字符开始。比如第一次打满第一个字符,然后开始找上一个跟现在这个不同 不同则加1。具体看代码。。。感觉自己思路有点问题 希望能有大佬帮忙指正.
var prinMachine = function (str) { // 'aabbabba' let nlist = Array.from(new Set(str)) console.log(nlist) let len = nlist.length-1 let res = new Array(nlist.length).fill(Infinity) // 每个都铺满一次 while(len>=0){ let path = 1 // main做为基准铺满字母 let main = nlist.pop() // b a let newstr = main+str // baaabbb aaaabbb let pre = newstr[0] // b a for(let j=1;j<newstr.length;j++){ // path怎么样才+1 // a a if(pre!=newstr[j]&&main!=newstr[j]){ path++ pre = newstr[j] } } res[len] = path nlist.unshift(main) len-- } // console.log(res) return Math.min(...res) }#小米笔试##前端##小米科技#