28. 找出字符串中第一个匹配项的下标(Java)

题目描述:

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

输入:

haystack = “leetcode”, needle = “leeto”

输出:

-1
解释:“leeto” 没有在 “leetcode” 中出现,所以返回 -1 。

代码实现:

public class Main{
    public static void main(String[] args) {
        String haystack = "leetcode";
        String needle = "leeto";
        System.out.println(strStr(haystack, needle));//-1
    }

    /**
     * 朴素模式匹配
     *
     * @param haystack 主串
     * @param needle   模式串
     * @return 返回匹配到的第一个索引
     */
    public static int strStr(String haystack, String needle) {
        //如果模式串长度大于主串长度时,直接返回-1
        if (haystack.length() < needle.length()) {
            return -1;
        }
        int index = 0;//最终会索引
        int flag = 0;//标识变量
        for (int i = 0; i < haystack.length(); i++) {
            index = i;//依次从主串的每个字符开始匹配
            for (int j = 0; j < needle.length(); j++) {
                //条件:防止索引越界
                if (i + j < haystack.length() && haystack.charAt(i + j) == needle.charAt(j)) {
                    flag = 1;//当本轮匹配中字符相同时,标记变量为1
                } else {
                    //当本轮匹配字符不同时,标记为0,并跳出循环
                    flag = 0;
                    break;
                }
            }
            //如果标记为1,则说明已经匹配到模式串,跳出循环
            if (flag == 1) {
                break;
            } else {
                //反之,未匹配成功,将索引变量赋值为-1
                index = -1;
            }
        }
        return index;
    }
}

你可能感兴趣的:(力扣刷题,java,开发语言)