本题难度:
简单
思路一:
纯脑残地调用函数即可,因为本题的描述和indexOf()的函数描述一致,直接用就行了。
思路一代码:
class Solution {
public int strStr(String haystack, String needle) {
return (haystack.indexOf(needle));
}
}
思路一复杂度:
indexOf无限接近于T(n)=O(1)
思路二:
使用简单的蛮力匹配算法(BF算法)实现模式匹配,设置两个工作指针,分别指向主串和模式串,如果所指两个元素相等则后移两个指针,否则主串指针回溯到i-j+1的位置,同时模式串指针回溯到模式串起始位置,当模式串指针遍历完模式串则说明在主串中找到模式串,返回i-j即起始匹配位置,否则当主串指针遍历完主串仍未找到模式串则返回-1。
思路二代码:
/*
作者:zouxuecheng
日期:2024-1-29
思路:使用简单的蛮力匹配算法(BF算法)实现模式匹配,设置两个工作指针,分别指向主串和模式串,如果所指两个元素相等则后移两个指针,否则主串指针回溯到i-j+1的位置,同时模式串指针回溯到模式串起始位置,当模式串指针遍历完模式串则说明在主串中找到模式串,返回i-j即起始匹配位置,否则当主串指针遍历完主串仍未找到模式串则返回-1
*/
class Solution {
public int strStr(String haystack, String needle) {
int i = 0;
int j = 0;
while(i < haystack.length()){
if(haystack.charAt(i) != needle.charAt(j)){
i = i - j + 1;
j = 0;
}
else{
i++;
j++;
}
if(j == needle.length())
return i - j;
}
return -1;
}
}
思路二复杂度:
时间复杂度T(n)=O(m*n)——m、n分别是主串和模式串的长度
空间复杂度S(n)=O(1)
思路三:
采用KMP算法,共分为求next数组和模式匹配这两步,避免了BF当中的重复回溯,建议自己练习,故这里不贴答案。
思路三代码:
略
思路三复杂度:
略