问题:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = "hello", needle = "ll" Output: 2
Example 2:
Input: haystack = "aaaaa", needle = "bba" Output: -1
解决:
【注】strStr(String haystack, String needle):用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回 -1。
① 使用两个指针顺序遍历两个字符串的每一个元素即可。注意p1每次失败后只能移向第一个字符的下一个位置,否则会漏掉很多组合。
public class Solution{//14ms
public int strStr(String haystack, String needle) {//子串是按顺序排放的
if(needle.length() == 0) return 0;
int p1 = 0;
int p2 = 0;
int fir = 0;//记录起始位置
int next =1;
int count = 0;//记录匹配的个数
while(p1 < haystack.length()){
if(haystack.charAt(p1) == needle.charAt(p2)){
count ++;
p1 ++;
p2 ++;
}else{
count = 0;
p2 = 0;
p1 = next;
fir = p1;
next = fir + 1;
}
if(count == needle.length()) return fir;
}
return -1;
}
}
② 最简单的方法是直接调用String类的函数。
public class Solution {//6ms
public int strStr(String haystack, String needle) {
return haystack.indexOf(needle);
}
}
③ 第①种方法的进化版。也调用了String类的方法。
public class Solution {//6ms
public int strStr(String haystack, String needle) {
if(needle.equals(haystack) || needle.length() == 0) return 0;//字符串相等或者字串为空
if(haystack.length() == 0 || haystack.length() < needle.length()) return -1;
int len = needle.length();
for(int i = 0; i < haystack.length(); i++){
if(haystack.charAt(i) == needle.charAt(0)){
if(i + len > haystack.length()) break;
if(needle.equals(haystack.substring(i, i + len))) return i;
}
}
return -1;
}
}
来源:oschina
链接:https://my.oschina.net/u/2968041/blog/1204241