返回
JS 手写系列面试题:全面提升你的 JS 技能
前端
2023-09-19 10:23:24
最近这段时间一直在整理学习 js 的手写部分,有哪写的不对的地方,欢迎指出,对哪些有不同见解的,欢迎补充,也希望这些整理能对你有所帮助!!废话就不多说了,直接进入主题吧!!
1. 实现一个函数,找出数组中最长的公共前缀。
function longestCommonPrefix(strs) {
if (strs.length === 0) {
return "";
}
let prefix = "";
let minLength = Math.min(...strs.map((str) => str.length));
for (let i = 0; i < minLength; i++) {
const char = strs[0][i];
if (strs.every((str) => str[i] === char)) {
prefix += char;
} else {
break;
}
}
return prefix;
}
2. 实现一个函数,判断一个字符串是否是回文。
function isPalindrome(str) {
str = str.toLowerCase().replace(/[^a-zA-Z0-9]/g, "");
return str === str.split("").reverse().join("");
}
3. 实现一个函数,将一个字符串中的所有空格替换为 %20。
function urlEncode(str) {
return str.replace(/ /g, "%20");
}
4. 实现一个函数,将一个整数反转。
function reverseInteger(num) {
let reversed = 0;
let isNegative = num < 0;
num = Math.abs(num);
while (num > 0) {
reversed = reversed * 10 + num % 10;
num = Math.floor(num / 10);
}
return isNegative ? -reversed : reversed;
}
5. 实现一个函数,找出数组中重复的数字。
function findDuplicates(nums) {
const duplicates = [];
const set = new Set();
for (let i = 0; i < nums.length; i++) {
if (set.has(nums[i])) {
duplicates.push(nums[i]);
} else {
set.add(nums[i]);
}
}
return duplicates;
}
6. 实现一个函数,判断一个字符串是否包含所有字母。
function hasAllLetters(str) {
str = str.toLowerCase();
const alphabet = "abcdefghijklmnopqrstuvwxyz";
for (let i = 0; i < alphabet.length; i++) {
if (!str.includes(alphabet[i])) {
return false;
}
}
return true;
}
7. 实现一个函数,找出数组中最长递增子序列。
function longestIncreasingSubsequence(nums) {
const dp = new Array(nums.length).fill(1);
let maxLen = 1;
for (let i = 1; i < nums.length; i++) {
for (let j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
maxLen = Math.max(maxLen, dp[i]);
}
return maxLen;
}
8. 实现一个函数,判断两个字符串是否互为同构。
function isIsomorphic(str1, str2) {
if (str1.length !== str2.length) {
return false;
}
const map1 = {};
const map2 = {};
for (let i = 0; i < str1.length; i++) {
if (!map1[str1[i]]) {
map1[str1[i]] = str2[i];
}
if (!map2[str2[i]]) {
map2[str2[i]] = str1[i];
}
if (map1[str1[i]] !== str2[i] || map2[str2[i]] !== str1[i]) {
return false;
}
}
return true;
}
9. 实现一个函数,判断一个字符串是否匹配给定的正则表达式。
function matchesRegex(str, regex) {
const re = new RegExp(regex);
return re.test(str);
}
10. 实现一个函数,将一个字符串中的所有数字累加。
function sumDigits(str) {
const digits = str.match(/\d+/g);
if (digits === null) {
return 0;
}
return digits.reduce((acc, curr) => parseInt(acc) + parseInt(curr), 0);
}