🚀 前言

大家好呀,我是毛小悠,可以叫我二毛,在家中排行老二,是一名前端开发工程师。

本系列文章旨在通过练习来提高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) ? '(' : ')');
}

🍁后序

本系列会定期更新的,题目会由浅到深的逐步提高。

求关注求点赞 👍~~🍭🍭🍭

可以关注我的公众号:前端毛小悠。欢迎阅读


前端毛小悠
14 声望7 粉丝