Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
我的思路:
暴力方法,简单直接。
从字符串haystack的第一个字符开始,从左至右依次匹配它的子串(同needle比较)。如果遇到不匹配的就从头再来,从上次比较的起始位置的下一个位置开始匹配。
时间复杂度分析:
假设haystack.lenth()==m, needle.length()==n,那么时间复杂度=O(mn).
需要考虑到的一些情况:
1.needle、haystack为空
2、needle 长度要比haystack要长时
3、被匹配过的字符还可以作为下一次匹配的开头,如Mississippi 和 issip
4.如果needle的长度要比haystack中剩下的要匹配的子串长度都长,那么匹配一定会失败,返回-1,
所以当needle.length>haystack.length()-curPosition时返回-1;
算法Java实现:
public int strStr(String haystack,String needle){
for(int i=0; ;i++){
for(int j=0; ;j++){
if(j==needle.length()) return i;
if(i+j==haystack.length()) return -1;
if(needle.charAt(j)!=haystack.charAt(i+j)) break;
}
}
}