美文网首页
28.实现strStr

28.实现strStr

作者: 夜空中最亮的星_6c64 | 来源:发表于2018-12-25 11:35 被阅读0次

    题目描述:

    实现 [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:

    public int strStr(String haystack, String needle) {
            return haystack.indexOf(needle);
        }
    

    解答 2:

    public static int strStr(String haystack, String needle) {
            // 子串长度为0,返回0
            if (needle.length() == 0) {
                return 0;
            }
            // 子串或者母串为空,返回-1
            if (haystack == null || needle == null) {
                return -1;
            }
            int j = needle.length();
            
            // 循环母串,到子串长度前停止
            for (int h = 0; h < haystack.length() - needle.length() + 1; h++) {
                // 使用substring判断是否有子串;注意左闭右开,右侧需要+1
                // j每次都会自增,不满足就会i自增;h+j和j++等同效果【j保持不变;h++相当于j++】。
                if (haystack.substring(h, h+j).equals(needle)) {
                    System.out.println(h);
                    // 找到第一个位置就可以return
                    return h;
                }
            }
            /*
            int i=0;
            while(i<haystack.length()-j+1){
                if (haystack.substring(i, i+j).equals(needle)) {
                    System.out.println(i);
                    return i;
                }else{
                    i++;
                }
            }*/
            // 没有找到,return:-1
            return -1;
        }
    

    注意:

    1.灵活使用subString,注意右开
    2.可扩展很多,详见28.1

    相关文章

      网友评论

          本文标题:28.实现strStr

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