力扣LeetCode第28题实现strStr-查询指定子字符串
题目:
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
对于LeetCode把这题归为简单,那么我们就用暴力解法而不用KMP算法
思路:
从母字符串第一个字符开始与子字符串去匹配,如果母字符串与子字符串匹配失败,母字符串从下一个字符开始再次从头匹配子字符串,以此类推
代码:
class Solution {
public int strStr(String haystack, String needle) {
int n =0;
int m =0;
char[] s = haystack.toCharArray();
char[] p = needle.toCharArray();
while(n<s.length&&m<p.length){
if(s[n]==p[m]){
n++;
m++;
}else{
//如果没有匹配成功,下一次匹配的位置应是这次匹配的位置的下一个,如果前面已经匹配成功了m个,
//那么n要回到刚开始匹配的位置就是n-m因为n和m是一起增长的,那么下一次匹配的位置就是下一个字符就是n-m+1
n=n-m+1;
m=0;
}
}
//最终如果都匹配成功,由于n和m在匹配过程中一起增长,那么返回的下标就是n-m,也就是匹配成功的这次n的初始位置
return m==p.length?n-m:-1;
}
}
算法专题:力扣LeetCode算法专题