<每日 1 OJ> -LeetCode 28. 實現 strStr()

題目:

實現 strStr() 函數。css

給定一個 haystack 字符串和一個 needle 字符串,在 haystack 字符串中找出 needle 字符串出現的第一個位置 (從0開始)。若是不存在,則返回  -1。面試

示例 1:函數

輸入: haystack = "hello", needle = "ll"
輸出: 2
示例 2:spa

輸入: haystack = "aaaaa", needle = "bba"
輸出: -1
說明:指針

當 needle 是空字符串時,咱們應當返回什麼值呢?這是一個在面試中很好的問題。code

對於本題而言,當 needle 是空字符串時咱們應當返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。blog

思路:

此處是C的實現,須要用到3個指針

/**字符串

輸入: haystack = "hello", needle = "ll"
1.使用雙指針,指針i指向haystack的開始位置,指針j指向needle的開始位置
2.初始i=0,j=0,t=0。haystack[i]=h,needle[l]=l。以haystack串做爲外循環
3.第一次循環判斷,haystack[i]&&needle[j]有值知足條件,進入第一次循環
作判斷haystack[i]=h等於needle[l]=l不成立,t=t+1=1,i=1,j=0
4.第二次循環判斷,haystack[i]=e,needle[l]=l,haystack[i]&&needle[j]有值知足條件,進入第二次循環
作判斷haystack[i]=e等於needle[l]=l不成立,t=t+1=2,i=2,j=0
5.第三次循環判斷,haystack[i]=l,needle[l]=l,haystack[i]&&needle[j]有值知足條件,進入第三次循環
作判斷haystack[i]=l等於needle[l]=l成立,i=3,j=1,continue接下來的代碼不走,直接進入新的循環判斷
6.第四次循環判斷,haystack[i]=l,needle[l]=l,haystack[i]&&needle[j]有值知足條件,進入第四次循環
作判斷haystack[i]=l等於needle[l]=l成立,i=4,j=2,continue接下來的代碼不走,進入第五次循環
7.第五次循環判斷,haystack[i]=e,needle[l]='\0',haystack[i]&&needle[j]不知足條件,跳出循環
8.判斷needle[j] == '\0'知足條件,返回t=2,結束it

代碼:

// 28. 實現 strStr().cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include "stdlib.h"

int strStr(char * haystack, char * needle){
    int i = 0,j =0,t=i;//必定要有t
    while (haystack[i]&&needle[j]){
        if (haystack[i] == needle[j]){
            i++;
            j++;
            continue;
            //C 語言中的 continue 語句有點像 break 語句。但它不是強制終止,continue 會跳過當前循環中的代碼,強迫開始下一次循環。
        } else{
            t=t+1;
            i=t;
            j=0;
        }
    }
    //若是needle串到告終尾的時候,表明順利找到
    if (needle[j] == '\0'){
        return t;
    }
    //不然返回-1,沒找到
    return -1;
}


int _tmain(int argc, _TCHAR* argv[])
{
    
    int strStr(char * haystack, char * needle);
    char *str1 = (char*)malloc(100);
    char *str2 = (char*)malloc(100);
    // char *str = NULL;  錯誤的用法
    scanf("%s %s",str1,str2);
    int result=strStr(str1, str2);
    printf("%d",result);
    system("pause");       
    return 0;
}
相關文章
相關標籤/搜索