题目中明确说明了c语言里有这么一个同名的函数可以解决这个问题,那我们用使用它吧。
先介绍一下:
标准库函数strstr(s,t)返回一个指针,该指针指向字符串t和字符串s中第一次出现的位置;如果字符串t没有在字符串s中出现,函数返回NULL(空指针)。该函数声明在头文件<string.h>中
----以上解释摘录自《C程序设计语言(第二版)》。
那么根据它的说明我们就可以写出这样的简单的代码,注意返回的是一个指针,那么直接拿返回的地址减去长串的地址就能直到检测到的那个字符的索引了。
那么我们的代码可以这么写
#include <string.h>
int strStr(char * haystack, char * needle){
if(strstr(haystack,needle)==NULL) return -1; //判断是否为字串
else return strstr(haystack,needle) - haystack; //直接返回就好
}
c语言学到字符串的时候,老师就教过一种回溯法,即在主串中找到字串的第一个字母就开始往后找,找不到就字串索引回到0,字串索引+1;我试了这种方法,但是超时了,最后一个检测例子太长太耗时 。
即便直接给出39999的答案,通过了80个测试用例,也还是没放我过去,呜呜呜~~~
那么如果用Python写的话,是否还有相关的BIF呢?
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
return haystack.find(needle)
Python中有BIF find和rfind分别能从左边和右边开始找,非常方便。