???? 前言
大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。
本系列文章旨在通过练习来进步JavaScript的能力,一起欢快的做题吧。????????????
以下每道题,二毛我都有尝试做一遍。倡议限时训练,比方限定为半小时,如果半小时内想不进去,能够联合文章开端的参考答案来思考。
能够在下方评论区留言或者加我的微信:code\_maomao。期待你的到来。
求关注求点赞????\~~~????????????
???? 题目1:标签生成器
营销团队破费太多工夫输出标签。
让咱们用本人的标签生成器帮忙他们!
这是规定:
- 它必须以井号(
#
)结尾。 - 所有单词的首字母必须大写。
- 如果最终后果超过140个字符,则必须返回
false
。 - 如果输出或后果为空字符串,则必须返回
false
。
例子
" Hello there thanks for trying my Kata" => "#HelloThereThanksForTryingMyKata"" Hello World " => "#HelloWorld""" => false
习题代码
function generateHashtag (str) {}
???? 题目2:合并的字符串查看器
您面临编写一个算法来查看给定字符串s是否能够由其余两个字符串part1和part2形成的挑战。
限度是part1和part2中的字符应与s中的程序雷同。
面试官为您提供以下示例,并告诉您从给定的测试案例中找出其余的示例。
例如:
'codewars' is a merge from 'cdw' and 'oears': s: c o d e w a r s = codewarspart1: c d w = cdwpart2: o e a r s = oears
习题代码
function isMerge(s, part1, part2) { return false;}
???? 题目3:约瑟夫斯幸存者
您必须正确返回谁是“幸存者”,即:Josephus排列的最初一个元素。
基本上,假如将n集体围成一个圈,并依照k个元素的步骤将其打消,如下所示:
josephus_survivor(7,3) => means 7 people in a circle;one every 3 is eliminated until one remains[1,2,3,4,5,6,7] - initial sequence[1,2,4,5,6,7] => 3 is counted out[1,2,4,5,7] => 6 is counted out[1,4,5,7] => 2 is counted out[1,4,5] => 7 is counted out[1,4] => 5 is counted out[4] => 1 counted out, 4 is the last element - the survivor!
留神和提醒:应用另一套解决方案来查看您的性能可能会有所帮忙,然而因为将应用更大的数字,因而应用数组/列表来计算幸存者的数量可能会太慢;您能够假如n和k都将始终> = 1。
习题代码
function josephusSurvivor(n,k){ //your code here}
答案
???? 题目1的答案
参考答案1:
function generateHashtag (str) { return str.length > 140 || str === '' ? false : '#' + str.split(' ').map(capitalize).join('');}function capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1);}
参考答案2:
function generateHashtag (str) { if(!str || str.length < 1) return false; var r = '#' + str.split(' ').map(function(el) { return el.charAt(0).toUpperCase() + el.slice(1).toLowerCase(); }).join(''); return r.length > 140?false:r;}
参考答案3:
function generateHashtag (str) { var hashtag = str.split(' ').reduce(function(tag, word) { return tag + word.charAt(0).toUpperCase() + word.substring(1); }, '#'); return hashtag.length == 1 || hashtag.length > 140 ? false : hashtag;}
参考答案4:
function generateHashtag(str) { var hashed = '#' + str.split(' ').map(function(v) {return v.charAt(0).toUpperCase() + v.slice(1);}).join(''); return hashed.length > 140 || str == "" ? false : hashed;}
参考答案5:
function generateHashtag (str) { var s = "#" + str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()}).split(" ").join(""); if(str && s.length <= 140){ return s; } return false; }
???? 题目2的答案
参考答案1:
function isMerge(s, part1, part2) { return !s ? !(part1 || part2) : s[0] == part1[0] && isMerge(s.slice(1), part1.slice(1), part2) || s[0] == part2[0] && isMerge(s.slice(1), part1, part2.slice(1));}
参考答案2:
function isMerge(s, part1, part2) { if (s === "" && part1 === "" && part2 === "") return true; if (s !== ""){ if (s[0] === part1[0] && part1[0] === part2[0]){ // we make two branches of an recursion and get OR of the answers return (isMerge(s.slice(1), part1.slice(1), part2) || isMerge(s.slice(1), part1, part2.slice(1))); } else if (s[0] === part1[0]){ return isMerge(s.slice(1), part1.slice(1), part2); } else if (s[0] === part2[0]){ return isMerge(s.slice(1), part1, part2.slice(1)); } } return false;}
参考答案3:
const isMerge = (s, part1, part2) => (fn => !s ? !(part1 || part2) : fn(part1, part2) || fn(part2, part1)) ((p1, p2) => s[0] === p1[0] && isMerge(s.slice(1), p1.slice(1), p2));
参考答案4:
var isMerge = (s, x, y) => !s ? !(x || y) : check(s, x, y) || check(s, y, x);var check = (a, b, c) => a[0] == b[0] && isMerge(a.slice(1), b.slice(1), c);
参考答案5:
const isMerge = (s3, s1, s2) => { let dp = []; if (s1 === "") { return s2 === s3; } if (s2 === "") { return s1 === s3; } if (s1.length + s2.length !== s3.length) { return false; } for (let i = 0; i < s1.length + 1; i++) { dp.push([]); for (let j = 0; j < s2.length + 1; j++) { if (i === 0 && j === 0) { dp[i].push(true); } else { let char = s3.charAt(i + j - 1); if (char === s1.charAt(i - 1) && dp[i -1][j]) { dp[i].push(true); } else if (char === s2.charAt(j - 1) && dp[i][j - 1]) { dp[i].push(true); } else { dp[i].push(false); } } } } return dp[s1.length][s2.length];};
???? 题目3的答案
参考答案1:
function josephusSurvivor(n, k){ return n < 1 ? 1 : (josephusSurvivor(n - 1, k) + --k) % n + 1;}
参考答案2:
function josephusSurvivor(n,k){ res=1; for (var i=1;i<=n;i++) res=(res+k-1)%i+1; return res;}
参考答案3:
function josephusSurvivor(n,k){ var people = [], p = 0; for (var i = 0; i < n; i++) { people.push(i+1); } while (people.length > 1) { p = (p + k - 1) % people.length; people.splice(p, 1); } return people.pop();}
参考答案4:
const josephusSurvivor = (n, k) => n - 1 ? (josephusSurvivor(n - 1, k) + k - 1) % n + 1 : 1;
参考答案5:
function josephusSurvivor(n, k) { // Source: https://en.wikipedia.org/wiki/Josephus_problem#The_general_case // (I couldn't come up with the formula myself :p) return n === 1 ? 1 : ((josephusSurvivor(n - 1, k) + k - 1) % n) + 1;}
????后序
本系列会定期更新的,题目会由浅到深的逐步提高。
求关注求点赞 ????~~????????????
能够关注我的公众号:前端毛小悠。欢送浏览