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)
}#小米笔试##前端##小米科技#
查看11道真题和解析