这几天跑了好多宣讲会,也做了不少笔试,给我印象最深的还是这些笔试题没有一道和前端技术有关的,大多数都是算法题.好吧,言归正传有两道题 我影响深刻.
1.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b.
这题我做的时候一直在想怎么用JS写出来,想了好久感觉没写好,于是回来后仔细思考了下,总算是写出来比较满意的解法了.
function least(string){
var o={};
var len=string.length;
for(var i=0;i<len;i++){
var k=string.charAt(i);
if(o[k]){
o[k]++;
}else{
o[k]=1;
};
}
var min=len;
for(var k in o){
if(min>o[k]){
min=o[k];
}
}
for(var k in o){
if(min==o[k]){
console.log(k)
}
}
}
2.function repeat (func, times, wait) {
} 这个函数能返回一个新函数,比如这样用var repeatedFun = repeat(alert, 10, 5000)
调用这个 repeatedFun ("hellworld")会alert十次 helloworld, 每次间隔5秒 .
function repeat (func, times, wait) {
return function(str){
for(var i=0;i<times;i++){
(function(){
setTimeout(function timer(){
func(str)
},wait*i)
})(i)
}
}
}
var repeatedFun = repeat(alert, 10, 5000);
repeatedFun ("hellworld");
这题就是闭包的运用