LeetCode 28: Implement strStr()

来源:互联网 发布:数据库原理视频专辑 编辑:程序博客网 时间:2024/06/05 03:59

原题链接在此:https://leetcode.com/problems/implement-strstr/

这是一道经典的题目,要实现在字符串中找另一个字符串的功能,Java中对应的函数是String.indexOf()。这题没有什么捷径可走,无非就是两个循环依次遍历所有的情况,设两个字符串长度为m和n,则总时间复杂度是O(m * n)。这里要注意的是:这样直接提交会超时。要对算法做如下优化:当haystack的剩余长度已经小于needle的剩余长度时,肯定找不到了,直接略过这些运算。这样优化后的时间复杂度是O((m - n) * n)。

    public int strStr(String haystack, String needle) {        int m = haystack.length();        int n = needle.length();        // 长度为0时直接判断为0        if (n == 0)            return 0;        for (int ret = 0; ret <= m - 1; ret++) {            // 减枝,可以省去不少运算,不然提交会超时            if (m - ret < n)                break;            int i = ret;            int j = 0;            while (i <= m - 1 && j <= n - 1) {                if (haystack.charAt(i) != needle.charAt(j))                    break;                i++;                j++;            }            // 当遍历超过needle最后一位时,认为找到了合适位置            if (j == n)                return ret;        }        return -1;    }
原创粉丝点击