看到别人的面试题就忍不住做了一下

失恋了就专心写代码。

1. 设计一个plus函数、实现plus(1)(2)()=3、plus(1)(2)(3)()=6。

今天去深入学习了一下柯里化,写了个柯里化的装饰器,了解请到https://segmentfault.com/a/11...

// 虽然实现了,这并不是好的实现方式,更好见我上面链接
function plus(a){
  function g(b) {
    if(b === undefined) {
      return a
    }
    a+=b;
    return g
  }
  return g
}
  

2. 存在字符串str1、str。找出a是否包含在b中,如果包含多个返回第一个位置,没有包含则返回-1.如:str1='123' str2='4512356123' 则返回2。不能使用indexOf、substr等。

// 复杂度为n-m(str1的长度为n,str2的长度为m)
function t(str1, str2) {
    let a = -1
    if(!str1.length && str1.length > str2.length) {  // 谢谢@JarryChung指出错误
      return a
    }else {
    /**  这是我旧的代码
    let arr_a = str1.split("")
      let arr_b = str2.split("")
      const len = arr_b.length-arr_a.length
      for(let i = 0; i <= len; i++) {  // 参考KMP将复杂度降低m,谢谢 @行政 的建议
        if(arr_b[i] === arr_a[0] && arr_b.slice(i, i + arr_a.length).join("") === str1) {
          a = i
          break
        }
      }
    }
    */
    // 这是 @NrightCc 提出的解法,让我发现了新大陆,跟大家分享一下
        const arr = str2.split(str1);
        if(arr.length>1){
            a = arr[0].length
        }
        
        
        return a
  }

你可能感兴趣的:(javascript)