🚀 前言
大家好呀,我是毛小悠,可以叫我二毛,在家中排行老二,是一名前端开发工程师。
本系列文章旨在通过练习来提高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) ? '(' : ')');
}
🍁后序
本系列会定期更新的,题目会由浅到深的逐步提高。
求关注求点赞 👍~~🍭🍭🍭
可以关注我的公众号:前端毛小悠。欢迎阅读
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。