力扣LeetCode第28题实现strStr-查询指定子字符串

力扣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算法专题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值