美文网首页
字符串查找

字符串查找

作者: 柠檬师傅 | 来源:发表于2016-11-26 07:13 被阅读0次
    对于一个给定的 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;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:字符串查找

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