public class StringAlgorithm {
public static void main(String[] args) {
int result = plainFindSubStr("12345", "1234");
System.out.println(result);
}
/**
* @param str
* @param pattern
* @return pattern在str中第一次出现的位置,返回其第一次字符出现的index下标
* 注意:返回-1表示没有找到符合要求的字串
* 设str.length()=m,pattern.length()=n
* 最坏时间复杂度:o(m*n)
*/
public static int plainFindSubStr(String str,String pattern){
//判空处理 & 如果字串长度比母串还长,快速返回
if (str == null || pattern == null || str.length() < pattern.length()){
return -1;
}
//注意这里母串的滑动窗口从index=0,滑到index=m-n的位置即可。滑到m-n的位置,到结尾的长度刚好是n
//如果继续往后滑,可能charAt()方法会报数组越界错误
lo:for (int i = 0; i < str.length()-pattern.length()+1; i++) {
for (int j = 0; j < pattern.length(); j++) {
//这里但凡有一个不相等,直接结束本次外层循环,进入下一次外层循环,不会执行下面的return代码
if (str.charAt(i+j) != pattern.charAt(j)){
continue lo;
}
}
//到这里说明上面的比较都是相等的,可以直接返回结果了
return i;
}
return -1;
}
}
标签:子串,index,return,int,pattern,length,算法,str,字符串
From: https://blog.csdn.net/m0_63246220/article/details/140569191