力扣28实现strStr()

本文详细解析了如何实现strStr()函数,该函数用于在haystack字符串中查找needle字符串首次出现的位置。文章通过三种情况讨论了算法实现,并提供了完整的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (0开始)。如果不存在,则返回  -1。
示例 1:输入: haystack = "hello", needle = "ll"输出: 2
示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1
说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

拿到这道题目,心头一阵颤抖,这题目想干啥?
呜。我觉得这个题目就是找到子串的起始位置。那么这样就很简单啦
我们将字符串转为数组,然后遍历即可。
分三大种情况
1、haystack长度大于needle长度时:
可是,我们如何判断子串的初始位置,那么就是当haystack的某一个字符和needle的首字符相同即可,同时保存当前位置的指针。接下来进入内层循环,判断是否后面的也相同。
若相同则跳出循环,返回位置,不相同则指针后移,但后移的过程中为了避免数组越界,我们需要将最外层循环的次数设为haystack-needle+1.这样就避免了数组越界的问题。
同时此种情况有个特殊的,当needle为“”空字符串时,返回0即可
2、haystack长度等于needle长度时,一次循环,不同的话跳出返回-1,相同返回0即可。
3、haystack长度小于needle长度时,返回-1
代码如下所示

class Solution {
    public int strStr(String haystack, String needle) {
        if(needle.length()==0)//1的特殊情况
	          return 0;
	    else  if(haystack.length()<needle.length())//情况3
	          return -1;
	        else{
	        	char[] hay=haystack.toCharArray();
	        	char[] need=needle.toCharArray();
        		boolean flag=false;//标志位判断是否有子串
                if(hay.length==need.length){//情况2
        			flag=true;
        			int i=0;
        			for(;i<hay.length;i++)
        				if(hay[i]!=need[i])
        				{
        					flag=false;
        					break;
        				}
        			if(flag==true)
        				return 0;
        		}
        		else{
	        	for(int i=0;i<hay.length-need.length+1;i++){//情况1
	        		if(hay[i]==need[0]){
	        			flag=true;
	        			for(int j=0;j<need.length;j++){
	        				if(hay[i+j]!=need[j])
	        					flag=false;
	        				if(flag==false)
	        					break;
	        			}
	        		}
	        		if(flag==true){
	        			return i;
	        		}
	        		else{}
	        	  }
                }
	        	if(flag==false)
	        		return -1;
	        }
	       return -1;  
    }
}

最后宣传下我个人的微信公众号,微信搜索:可及的小屋,有志向整副业,娱乐的程序员们,欢迎您的到来。谢谢。
100G程序员资料,自取哦!!
可及的小屋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值