2018年1月27日 星期六

[28] Implement strStr()

嗯~這個題目~
可以用strstr()嗎? (被打)
但還是偷偷用了strncmp XDDDDDD
後來良心不安再寫了一個沒有用strncmp的版本
但看討論好像跟什麼KMP有關 (不是KMT國民黨XD)
好懶得動腦喔可以不要管它嗎~~(滾來滾去滾來滾去)

Implement strStr()
int strStr(char* haystack, char* needle) {
    if (haystack == NULL || needle == NULL)
        return -1;

    int length = strlen(haystack);
    int lengthIn = strlen(needle);

    if(length < lengthIn)
        return -1;
    else if (length == 0 && lengthIn ==0)
        return 0;
     
    int i;
    for(i=0;i<=length - lengthIn;i++)
    {
        printf("[%d][%s]\n",i,haystack+i);
#if 1      
        int j;
        for (j=0;j<lengthIn;j++)
        {
// printf("[%d][%d][%c][%c]\n",i,j,haystack[i+j],needle[j]);
            if(haystack[i+j]!=needle[j])
                break;
        }
        if (j==lengthIn)
            return i;
#else
        if (strncmp(haystack+i,needle,lengthIn)==0)
            return i;
#endif
    }
    return -1;
}


[20260713更新]
姆襪哈哈哈哈哈哈哈完全看不懂以前的自己在寫什麼!!!!!
而且最佳解寫的好漂亮! 討厭XD!!!

int strStr(char* haystack, char* needle) {
int l1 = strlen(haystack);
int l2 = strlen(needle);
// if (l2>l1)
// return -1;
int i=0;
while (l1-i >= l2)
{
int j=0;
while (i<l1 && haystack[i]!= needle[j])
i++;
int ret = i;
while (i<l1 && j<l2 && (haystack[i]== needle[j]))
{
i++;
j++;
}
if (j==l2)
return ret;
else
i= ret+1;
}
return -1;
}

沒有留言:

張貼留言