实现一个字符串匹配算法,从字符串 S 中,查找是否存在 T,若存在则返回所在位置,不存在则返回-1
如果不用indexOf/includes等内置方法,你会如何处理
let S = "zhufengstart开始zhufengend结尾HAHAHAHA";
let T = "iii";
~(function() {
/* 使用正则的情况下的方法 */
/* function myIndexOf(data) {
let str = this;
let reg = new RegExp(data);
let result = reg.exec(str);
return result === null ? -1 : result.index;
} */
/* 不使用正则的情况下的方法 */
/* function myIndexOf(data) {
let str = this;
let arr = str.split(data)
// console.log(arr);
if(arr.length === 1) {
return -1
}else {
let startItem = arr[0]
return startItem.length
}
} */
/*
循环原始字符串中的每一项,让每一项从当前位置向后截取T.length个字符,然后进行比较,如果不一样,继续循环;如果一样则返回当前索引即可(循环结束)
此方法不好
*/
function myIndexOf(data) {
let lenT = data.length,
lenS = this.length,
res = -1
for(i = 0;i<=lenS - lenT; i++ ) {
// let char = this.charAt(i);
// let char = this[i];
// console.log(char)
if (this.substr(i, lenT) === data) {
res = i
break;
}
}
return res
}
String.prototype.myIndexOf = myIndexOf;
})();
console.log(S.myIndexOf(T));