返回

JS 手写系列面试题:全面提升你的 JS 技能

前端

最近这段时间一直在整理学习 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);
}