leetcode算法【28】实现 strStr()

所有题目源代码:Git地址

题目

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (0开始)。如果不存在,则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

方案

  • 简单的遍历即可
版本1
class Solution {
        public int strStr(String haystack, String needle) {

            if (needle.length()==0) return 0;
            else if (haystack.length()==0) return -1;
            boolean jud ;
            for(int i = 0;i<haystack.length();i++){
                if (haystack.charAt(i)==needle.charAt(0)&&i+needle.length()<=haystack.length()){
                    jud = true;
                    for(int j = 1;j<needle.length();j++){
                        if (needle.charAt(j)!=haystack.charAt(i+j)){
                            jud = false;
                            break;
                        }
                    }
                    if (jud) return i;
                }

            }
            return -1;
        }
    }
版本2
  • 考虑了某些情况用以跳过不必要的循环,但是由于判断增多,所以在needle较短的时候没有优势
class Solution {
    public int strStr(String haystack, String needle) {
        if (needle.length()==0) return 0;
        else if (haystack.length()==0) return -1;
        boolean jud ;
        int index = 0;
        for(int i = 0;i<haystack.length();i++){
            if (haystack.charAt(i)==needle.charAt(0)&&i+needle.length()<=haystack.length()){
                jud = true;
                for(int j = 1;j<needle.length();j++){
                    if(index==0&&needle.charAt(0)==haystack.charAt(i+j)){
                        index = i+j-1;
                    }
                    if (needle.charAt(j)!=haystack.charAt(i+j)){
                        jud = false;
                        if(index==0) i +=j-1;
                        else if (index!=0){i = index;index = 0;}
                        break;
                    }
                }
                if (jud) return i;
            }

        }
        return -1;
    }
}
复杂度计算
  • 时间复杂度:O(mn)
  • 空间复杂度:O(1)
原创文章 179 获赞 270 访问量 34万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/105949627
今日推荐