失恋了就专心写代码。
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
}