036-实现strStr函数

描述

判断一个字符串是否是另一个字符串的子串;

分析

采用暴力方法进行查找:

1,计算出待查找子串的长度;

2,使用两个指针在源字符串标识出开始结尾的元素;

3,在标识出的区域依次和待查找子串进行比较;

4,完全匹配,则返回源字符串的开始位置;

5,不匹配,则前移源字符串中的开始、结尾元素指针;

实现

// Implement strStr

char *strStr(const char *haystack, const char *needle)

{

// 标识源字符串的查找范围

const char *pBeginSrc = haystack;

const char *pEnd = haystack;



const char *ptag = &needle[1];

while (*ptag) {

    ++pEnd;

    ++ptag;

}



// 开始在源字符串匹配子串

for (; *pEnd; ++pEnd) {

    char *pOldBegin = (char *)pBeginSrc;

    const char *p2 = needle;



    while (*pBeginSrc && *p2 && *pBeginSrc==*p2) {

        ++pBeginSrc;

        ++p2;

    }

    if (!*p2) {

        return pOldBegin;

    }



    pBeginSrc = pOldBegin + 1;

}





return nullptr;

}

时间复杂度为O(mxn),空间复杂度为O(1)。

你可能感兴趣的:(036-实现strStr函数)