美文网首页
每周一道算法题(二十三)

每周一道算法题(二十三)

作者: CrazySteven | 来源:发表于2017-08-20 22:40 被阅读472次

    本周题目难度级别"Easy"

    题目:给你两个字符串haystack和needle,让你找出needle在haystack中的开始的位置,若没有就返回-1

    思路很简单,就是一个一个的比较,实现起来也比较简单,我就不写注释了,当然,效率太低没什么参考价值也是一个原因。

    int strStr(char* haystack, char* needle) {
        if (strlen(needle) < 1) {
            return 0;
        }
        if (strlen(haystack) < 1) {
            return -1;
        }
        
        int result = -1;
        int i,j,k;
        for (i = 0; i < strlen(haystack); i ++) {
            if (haystack[i] == needle[0]) {
                result = i;
    
                for (j = i; (j - i) < strlen(needle); j++) {
                    if (i == j) {
                        if ((strlen(haystack) - j) < (strlen(needle))) {
                            return -1;
                        }
                    }
                    
                    if (haystack[j] != needle[j-i]) {
                        result = -1;
                        if ((i + strlen(needle)) > strlen(haystack)) {
                            return result;
                        }
                        break;
                    }
                }
                if (result != -1) return result;
            }
        }
        return result;
    }
    

    需要说明的一点是,这是一道非常经典的题目,由此引出了KMP算法,这个KMP算法已经有很多文章了,有兴趣的朋友自己搜索学习即可。

    版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

    相关文章

      网友评论

          本文标题:每周一道算法题(二十三)

          本文链接:https://www.haomeiwen.com/subject/bueqdxtx.html