给你两个字符串 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;
}
}