mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
添加(0028.实现strStr.md):增加typescript版本
This commit is contained in:
@ -929,6 +929,83 @@ var strStr = function (haystack, needle) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
TypeScript版本:
|
||||||
|
|
||||||
|
> 前缀表统一减一
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function strStr(haystack: string, needle: string): number {
|
||||||
|
function getNext(str: string): number[] {
|
||||||
|
let next: number[] = [];
|
||||||
|
let j: number = -1;
|
||||||
|
next[0] = j;
|
||||||
|
for (let i = 1, length = str.length; i < length; i++) {
|
||||||
|
while (j >= 0 && str[i] !== str[j + 1]) {
|
||||||
|
j = next[j];
|
||||||
|
}
|
||||||
|
if (str[i] === str[j + 1]) {
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
next[i] = j;
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
if (needle.length === 0) return 0;
|
||||||
|
let next: number[] = getNext(needle);
|
||||||
|
let j: number = -1;
|
||||||
|
for (let i = 0, length = haystack.length; i < length; i++) {
|
||||||
|
while (j >= 0 && haystack[i] !== needle[j + 1]) {
|
||||||
|
j = next[j];
|
||||||
|
}
|
||||||
|
if (haystack[i] === needle[j + 1]) {
|
||||||
|
if (j === needle.length - 2) {
|
||||||
|
return i - j - 1;
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
> 前缀表不减一
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// 不减一版本
|
||||||
|
function strStr(haystack: string, needle: string): number {
|
||||||
|
function getNext(str: string): number[] {
|
||||||
|
let next: number[] = [];
|
||||||
|
let j: number = 0;
|
||||||
|
next[0] = j;
|
||||||
|
for (let i = 1, length = str.length; i < length; i++) {
|
||||||
|
while (j > 0 && str[i] !== str[j]) {
|
||||||
|
j = next[j - 1];
|
||||||
|
}
|
||||||
|
if (str[i] === str[j]) {
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
next[i] = j;
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
if (needle.length === 0) return 0;
|
||||||
|
let next: number[] = getNext(needle);
|
||||||
|
let j: number = 0;
|
||||||
|
for (let i = 0, length = haystack.length; i < length; i++) {
|
||||||
|
while (j > 0 && haystack[i] !== needle[j]) {
|
||||||
|
j = next[j - 1];
|
||||||
|
}
|
||||||
|
if (haystack[i] === needle[j]) {
|
||||||
|
if (j === needle.length - 1) {
|
||||||
|
return i - j;
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Swift 版本
|
Swift 版本
|
||||||
|
|
||||||
> 前缀表统一减一
|
> 前缀表统一减一
|
||||||
|
Reference in New Issue
Block a user