看到別人的面試題就忍不住作了一下

失戀了就專心寫代碼。javascript

1. 設計一個plus函數、實現plus(1)(2)()=三、plus(1)(2)(3)()=6。

今天去深刻學習了一下柯里化,寫了個柯里化的裝飾器,瞭解請到https://segmentfault.com/a/11...java

// 雖然實現了,這並非好的實現方式,更好見我上面連接
function plus(a){
  function g(b) {
    if(b === undefined) {
      return a
    }
    a+=b;
    return g
  }
  return g
}

2. 存在字符串str一、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
  }
相關文章
相關標籤/搜索