Leetcode28: Implement strStr()

28. Implement strStr()

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

题意:

在一个字符串haystack中寻找有没有子字符串needle,要是有的话,返回第一次出现的位置,否则返回1。

解法①:

遍历求解。从haystack的第一个元素开始尝试着和needle匹配,将二者的字符进行比较,如果相同,更新答案的index起点值,如果不同,则从index+1开始重新匹配。

代码:[cpp] view plain

  1. class Solution {  
  2. public:  
  3.     int strStr(string haystack, string needle) {  
  4.         int len1=haystack.size();  
  5.         int len2=needle.size();  
  6.         if(len2==0) return 0;  
  7.         if(len2>len1) return -1;  
  8.         int cur=0,index=-1,i=0;  
  9.         bool haveMatch=false;  
  10.         while(i<len1){  
  11.             if(needle[cur]==haystack[i]){  
  12.                 if(cur==0){  
  13.                     index=i;  
  14.                     haveMatch=true;  
  15.                 }  
  16.                 cur++;  
  17.                 i++;  
  18.                 if(cur==len2) return index;  
  19.             }  
  20.             else if(haveMatch==true){  
  21.                 i=index+1;  
  22.                 cur=0;  
  23.                 haveMatch=false;  
  24.             }  
  25.             else{  
  26.                 i++;  
  27.             }  
  28.         }  
  29.         return -1;  
  30.     }  
  31. };
复杂度:

设haystack长度为n,needle长度为m,那么该种解法的时间复杂度是O(nm)。

解法②:

这一题可以利用数据结构中学习过的KMP算法进行求解。利用KMP算法求解该问题的话,时间复杂度为O(n+m)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值