Return 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
Clarification:
What should we return when needle
is an empty string? This is a great question to ask during an interview.
For the purpose of this problem, we will return 0 when needle
is an empty string. This is consistent to C's strstr() and Java's indexOf().
本娃子码的代码,时间超限了,所以也没法调试,这里也放一下:
class Solution {
public int strStr(String haystack, String needle) {
int result = -1;
for(int i=0,j=0;i<haystack.length();){
if(haystack.charAt(i) == needle.charAt(j)){
if(j==0){
result=i;
}
i++;
j++;
if(j == needle.length()){
break;
}
}
}
return result;
}
}
然后去看这题的文档,总结如下,感触颇多:
我写的方法就是蛮力方法,即从第一个位置开始匹配后续字母,假设n=haystack的length, m=needle的length,则时间复杂度为:O(nm)。可以考虑以下几种情况:
1. 两个都为空。如果needle为空,总是返回0;如果haystack为空,needle不为空,则返回 -1,因为没有值匹配;
2.needle的长度大于haystack的长度,很明显,没有值匹配,返回-1;
3.如果有两个长度相等都为n的长串:"aa……aa","aa……ab",你不需要做超过n个字符的对比,否则就会导致时间超限
基于以上几点,被AC代码如下:
class Solution {
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;
}
}
}
}
温馨小提示:Java中可以使用indexOf来返回一个整数值,例如:
int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引,如果没有找到就返回-1.