美文网首页
要成功就做一百题-89

要成功就做一百题-89

作者: 西5d | 来源:发表于2020-09-09 17:21 被阅读0次

题目名称

实现字符串函数strStr() ,第28题

描述

//实现 strStr() 函数。 
//
// 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如
//果不存在,则返回 -1。 
//
// 示例 1: 
//
// 输入: haystack = "hello", needle = "ll"
//输出: 2
// 
//
// 示例 2: 
//
// 输入: haystack = "aaaaa", needle = "bba"
//输出: -1
// 
//
// 说明: 
//
// 对于本题而言,当 needle 是空字符串时我们应当返回 0 

解题思路

目的是找出某个字符串在另一个字符串的起始位置。首先是两种特殊情况,如果没有找到返回-1,如果输入的匹配字符串为空,则返回0,算作约定。

其次处理一般情况,这里把要匹配的字符串称作原始字符串,待匹配的称为模式字符串。定义两个标记位i,j,初始都为0。然后比较字符的大小,截止条件是到达两个字符串最大长度。
进行比较,如果相等,继续往后面匹配;
如果不相等,这里是重点,j标记模式字符串所以重置,重新开始,让值等于0;
而对于原始字符串,之前匹配过的就不再匹配了,但是当前匹配的j长度,要掉头回去,这里他新的进度就是当前i-j的值,然后从下一个位置开始即i-j+1
到最终全部匹配,到达截止条件后,判断模式匹配的值j是否是模式的长度,如果是,就返回i-j,掉头回去,代表匹配到的位置,如果不是就说明没有匹配到,返回-1,如下就是全部代码。

代码

    public int strStr(String haystack, String needle) {
        if (null == needle || "".equals(needle)) {
            return 0;
        }

        int i = 0, j = 0;
        while (i < haystack.length() && j < needle.length()) {
            if (haystack.charAt(i) == needle.charAt(j)) {
                i++;
                j++;
            } else {
                i = i - j + 1;
                j = 0;
            }
        }

        return j == needle.length() ? i - j : -1;
    }

    @Test
    public void test28() {
        //"mississippi" "issip"
        String haystack = "mississippi";
        String needle = "issi";
        System.out.println(strStr(haystack, needle));
    }

总结

这个思路看起来简单,但是细节上要把握很多,还是要多消化下的。

相关文章

  • 要成功就做一百题-89

    题目名称 实现字符串函数strStr() ,第28题 描述 解题思路 目的是找出某个字符串在另一个字符串的起始位置...

  • 要成功就做一百题-90

    题目名称 第十三题 罗马数字转整数 描述 解题思路 这里做了个找规律,先把所有字符加起来,再处理特殊情况,题目说了...

  • 要成功就做一百题-92

    题目名称 括号生成 描述 难度属于中等,目的是根据给定的括号数,生成有效的括号集合。 解题思路 这题比较有意思,这...

  • 要成功就做一百题-93

    题目名称 有效的括号判断 描述 输入的字符串只包含{ [] } ()三种括号的组合,判断输入是否是有效的括号,如下...

  • 要成功就做一百题-91

    题目名称 矩阵置零 描述 难度属于中等,如下是题目的描述,leetcode 73题。 解题思路 这里我也没用其他复...

  • 要成功就做一百题-99

    题目名称 爬楼梯问题,斐波拉契数列,泰波拉契数列 描述 第一个是常见的题目,第二个斐波拉契,第三个是斐波拉契的变种...

  • 要成功就做一百题-98

    题目名称 二叉树的中序遍历 描述 给定一个先序遍历的二叉树,打印出其中序(中根)遍历的结构。 解题思路 首先是根据...

  • 要成功就做一百题-100

    题目有点唬人,当然要的就是这个效果,标题党一把。从现在开始做100道leetcode题目,为了起到比较好的督促作用...

  • 要成功就做一百题-97

    题目名称 今天来一个简单题目试试水,好久没发了。 一来遇到个复杂题,一时没解,二来最近实在有点忙。废话不多,开始正...

  • 要成功就做一百题-95

    题目名称 已经排序的数组,必须在O(logn)的复杂度下统计得到指定元素的重复次数。 描述 比如数组[1,1,2,...

网友评论

      本文标题:要成功就做一百题-89

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