实现strStr()

实现 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的第一个元素相等,count用来判断是否比较到needle的末尾

int strStr(char* haystack, char* needle) {
    int len=strlen(haystack);
    int len2=strlen(needle);
    
    if((len==0&&len2==0)||len2==0){
        return 0;
    }
    if(len==0){
        return -1;
    }
   
    int count=0;
    for(int i=0;i

修改后

int strStr(char* haystack, char* needle) {
    int len=strlen(haystack);
    int len2=strlen(needle);
    
    if((len==0&&len2==0)||len2==0){
        return 0;
    }
    
    int count=0;
    int i=0;
    while(i<=len-len2){
        if(haystack[i+count]==needle[count]){
            if(count==(len2-1)){
                 return i;
             }
            ++count;
        }else{
            count=0;
            i++;
        }
    }
    return -1;
   

}

思路2

i<=haystack.length()-needle.length()是为了i+j不超过haystack的长度

class Solution {
    public int strStr(String haystack, String needle) {
        if(needle.isEmpty()){
            return 0;
        }
        
        for(int i=0;i<=haystack.length()-needle.length();++i){
            for(int j=0;j

思路3

 if (!haystack || !needle) return -1;
        for (int i = 0; ; ++i) {
            for (int j = 0; ; ++j) {
                if (needle[j] == 0) return i;
                if (haystack[i + j] == 0) return -1;
                if (haystack[i + j] != needle[j]) break;
            }
        }

你可能感兴趣的:(实现strStr())