算法面试

简单

判断一个单词是否是回文

回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。比如 mamam redivider。

很多人拿到这样的题目非常容易想到用 for 将字符串颠倒字母顺序然后匹配就行了。其实重要的考察的就是对于 reverse 的实现。其实我们可以利用现成的函数,将字符串转换成数组,这个思路很重要,我们可以拥有更多的自由度去进行字符串的一些操作。

function checkPalindrom(str) {  
  return str == str.split('').reverse().join('');
}
1
2
3

不借助临时变量,进行两个整数的交换

输入 a = 2, b = 4 输出 a = 4, b =2

这种问题非常巧妙,需要大家跳出惯有的思维,利用 a , b 进行置换。主要是利用 + - 去进行运算,类似 a = a + ( b - a) 实际上等同于最后的 a = b;

function swap(a , b) {  
  b = b - a;
  a = a + b;
  b = a - b;
  return [a,b];
}

module.exports = swap;  
1
2
3
4
5
6
7
8

去掉一组整型数组重复的值

比如输入: [1,13,24,11,11,14,1,2],输出: [1,13,24,11,14,2]

需要去掉重复的 11 和 1 这两个元素。这道问题出现在诸多的前端面试题中,主要考察个人对 Object 的使用,利用 key 来进行筛选。

随机生成指定长度的字符串

实现一个算法,随机生成指制定长度的字符窜。

比如给定长度 8 输出 8jab39m0

function randomString(n) {  
  let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
  let tmp = '',
      i = 0,
      l = str.length;
  for (i = 0; i < n; i++) {
    tmp += str.charAt(Math.floor(Math.random() * l));
  }
  return tmp;
}

module.exports = randomString;
1
2
3
4
5
6
7
8
9
10
11
12
function main(n) {
  if(n ===0) {
    return 
  }

   let res = [];

   function create(s, a) {

    if(s.length == n*2) {
      res.push(s)
      return 
    }
    if(a[0]< n){
       create(s+"(", [a[0]+1, a[1]]);
    }
    if(a[0] > a[1] && a[1] < n) {
      create(s+")", [a[0], a[1]+1]);
    }
  }
  create("", [0, 0]);
  console.log(res)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23