代码随想录的第八天
28. 找出字符串中第一个匹配项的下标
暴力匹配
var strStr = function(haystack, needle) {
if (needle.length === 0 || needle.length > haystack.length) return -1
for (let i = 0; i < haystack.length; i++) {
if (haystack[i] === needle[0]) {
var falg = true
for (let j = 0; j < needle.length; j++) {
if (needle[j] !== haystack[j+i]) {
falg = false
break
}
}
if (falg) return i
}
}
return -1
};
KMP算法:
var strStr = function(haystack, needle) {
if (needle.length === 0) return 0
let next = getNext(needle)
let j = 0
for (let i = 0; i < haystack.length; ++i) {
while (j > 0 && haystack[i] !== needle[j])
j = next[j - 1];
if (haystack[i] === needle[j])
j++;
if (j === needle.length)
return (i - needle.length + 1);
}
return -1
};
function getNext (needle) {
let next = []
let j = 0;
next.push(j)
for (let i = 1;i < needle.length;i++) {
while (j > 0 && needle[i] !== needle[j]) {
j = next[j - 1]
}
if (needle[i] === needle[j]) j++
next.push(j)
}
return next
}
思路:理论看懂了,算法没懂,后续回来补充
459. 重复的子字符串
暴力解法:
var repeatedSubstringPattern = function(s) {
let sum = ''
for (let i = 0; i < s.length - 1; i++) {
sum += s[i]
if (s === sum.repeat(Math.floor(s.length/ sum.length))) {
return true
}
}
return false
};
思路:
1、定义一个字符串用来存放最小的重复字符串
2、这个字符串是否能完全重复
KMP算法:
后续理解完成后更新