???? 前言
大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。
本系列文章旨在通过练习来进步 JavaScript 的能力,一起欢快的做题吧。????????????
以下每道题,二毛我都有尝试做一遍。倡议限时训练,比方限定为半小时,如果半小时内想不进去,能够联合文章开端的参考答案来思考。
能够在下方评论区留言或者加我的微信:code_maomao。期待你的到来。
求关注求点赞 ????~~~????????????
???? 题目 1:间断反复次数最长的字符
对于给定的字符串 s 找到间断反复次数最长的字符 c(或 C),而后返回:
[c, l]
其中 l(或 L)是反复的长度。如果有两个或更多个雷同的字符 l,则按呈现的程序返回第一个。
对于空字符串返回:
["", 0]
祝您编码欢快!:)
习题代码:
function longestRepetition(s) {}
???? 题目 2:Detect Pangram
七巧板是蕴含至多一个字母的每个字母的句子。例如,句子“疾速的棕色狐狸跳过懈怠的狗”“The quick brown fox jumps over the lazy dog” 是一个连字符,因为它至多一次应用字母 A -Z(大小写无关)。
给定一个字符串,检测它是否是一个七巧板。如果是,则返回 True,否则返回 False。疏忽数字和标点符号。
也就是说 a - z 每个字母都应用过至多一次,就返回 true。
function isPangram(string){//...}
???? 题目 3:如果元素呈现 n 次以上,则删除该元素的呈现
适可而止!
爱丽丝和鲍勃在度假。他们俩都为去过的中央拍了很多照片,当初他们想向 Charlie 展现他们的整个照片。然而,Charlie 不喜爱这些,因为照片通常会反复。他不喜爱见埃菲尔铁塔 40 次。他通知他们,只有在他们最多显示不超过 N 次雷同的照片时,他才会想看。侥幸的是,爱丽丝和鲍勃可能将动机编码为数字。您是否帮忙他们删除数字,以使他们的列表最多蕴含 N 次而不更改程序?
工作
给定一个列表 lst 和一个数字 N,创立一个新列表,其中最多蕴含 N 次每个 lst 数,而无需从新排序。例如,如果 N = 2,并且输出为 [1,2,3,1,2,1,2,3],则取 [1,2,3,1,2],删除下一个 [1,2],因为这将导致 1 和 2 在后果中呈现 3 次,而后取 3,从而得出 [1,2,3,1,2,3]。
例
deleteNth ([1,1,1,1],2) // return [1,1]
deleteNth ([20,37,20,21],1) // return [20,37,21]
习题代码
function deleteNth(arr,n){// ...}
???? 题目 4:反复编码器
本练习的目标是将字符串转换为新字符串,其中新字符串中的每个字符是 ”(“ 该字符在原始字符串中仅呈现一次,还是 ”)” 该字符在原始字符串中呈现屡次。确定字符是否反复时疏忽大写。
例子
"din" => "((("
"recede" => "()()()"
"Success" => ")())())"
"((@" => "))(("
习题代码
function duplicateEncode(word){// ...}
答案
???? 题目 1 的答案
function longestRepetition(s) {
let count = 0;
let prevLetter = '';
return s.toLowerCase().split('').reduce((acc, curr) => {if(curr === prevLetter){count++;}
else{count = 1;}
if(count > acc[1]){acc[1] = count;
acc[0] = curr;
}
prevLetter = curr;
return acc;
}, ['', 0]);
}
参考答案 2
const longestRepetition = s => s ?
s.match(/(.)1*/g)
.map((s, i) => [s[0], s.length, i])
.sort((a, b) => (b[1] - a[1]) || (a[2] - b[2]))[0]
.splice(0, 2) :
['', 0];
???? 题目 2 的答案
二毛解题思路:先去除和字母无关的字符。而后给数组排序和去重,而后判断数组的长度是否是 26。
参考答案 1:
function isPangram(string){string = string.toLowerCase();
return "abcdefghijklmnopqrstuvwxyz".split("").every(function(x){return string.indexOf(x) !== -1;
});
}
参考答案 2:
function isPangram(string){
return 'abcdefghijklmnopqrstuvwxyz'
.split('')
.every((x) => string.toLowerCase().includes(x));
}
参考答案 3:
function isPangram(string){
参考答案 4:
function isPangram(string) {
/* 思路:去除和字母无关的字符。而后给数组排序和去重,而后判断数组的长度是否有 26。*/
console.log("string:",string);
var arr=string.toLowerCase().split("").filter(function(v){if(v.search(/[A-z]/)!=-1){return true;}
});
arr.sort();
item = [...new Set(arr)];
if(item.length==26){return true;}
else {return false;}
}
???? 题目 3 的答案
二毛解题思路:
/ 思路:首先判断 n,是数组元素能够呈现的次数。须要一个对象寄存属性,属性值寄存次数,如果次数大于 0,就删除这个数组元素。/
参考答案 1
function deleteNth(arr,x) {var cache = {};
return arr.filter(function(n) {cache[n] = (cache[n]||0) + 1;
return cache[n] <= x;
});
}
参考答案 2:
function deleteNth(arr,x){while (true) {for (var i = 0; i < arr.length; ++i) {
var count = 0;
for (var j = 0; j < arr.length; ++j) {if (arr[i] === arr[j]) {
++count;
if (count > x) {arr.splice(j, 1);
break;
}
}
}
if (j !== arr.length) break;
}
if (i === arr.length) break;
}
return arr;
}
参考答案 3
function deleteNth(arr,x){var obj = {}
return arr.filter(function(number){obj[number] = obj[number] ? obj[number] + 1 : 1
return obj[number] <= x
})
}
???? 题目 4 的答案
二毛解题思路:
/ 思路:先转为小写。而后判断字符串单个字符的呈现次数。如果只有 1 次,就插入(到一个数组,如果呈现屡次,就插入一个),最初合并数组即可。/
参考答案 1:
function duplicateEncode(word){
return word
.toLowerCase()
.split('')
.map(function (a, i, w) {return w.indexOf(a) == w.lastIndexOf(a) ? '(' : ')'
})
.join('');
}
参考答案 2
function duplicateEncode(word) {word = word.toLowerCase();
return word.replace(/./g, m => word.indexOf(m) == word.lastIndexOf(m) ? '(' : ')');
}
???? 后序
本系列会定期更新的,题目会由浅到深的逐步提高。
求关注求点赞 ????~~????????????
能够关注我的公众号: 前端毛小悠 。欢送浏览