字符串查找

对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。

说明:在面试中我是否需要实现KMP算法?

  • 不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。
  • 样例
    如果 source = "source" 和 target = "target",返回 -1。
    如果 source = "abcdabcdefg" 和 target = "bcd",返回 1。
    O(n2)的算法是可以接受的。如果你能用O(n)的算法做出来那更加好。(提示:KMP)
public class strStr {
    /**
     * 解决思路:首先我们有source字符串和target字符串,source字符串最后的几个字符串长度小于target肯定不会有首次出现的可能。
     * 所以应该进行遍历操作的source字符串的长度是(source.length-target.length)的长度。
     * 在上面那个遍历中,我们可以获取source的position获取具体字符,再将target的所有字符串进行遍历,如果第一个字符与source的相同
     * 那么
     * ,继续下一个target及下一个source中的字符进行对比,直到target.length次后如果完全想同则返回外层遍历那个position,
     * 如果不同则返回上层遍历,postion+1,继续进行target的比对操作,如果全部没有则返回-1;
     * 时间复杂度为:O(n^2)
     */
    public int solution(String source, String target) {
        if (source == null || target == null) {
            return -1;
        }
        for (int i = 0; i <= source.length() - target.length(); i++) {
            int j = 0;
            for (j = 0; j < target.length(); j++) {
                if (source.charAt(i + j) != target.charAt(j))
                    break;
            }
            if (j == target.length()) {
                return i;
            }

        }

        return -1;
    }
}

你可能感兴趣的:(字符串查找)