28. Implement strStr()
这是个人刷LeetCode的第一篇博客。之前也在刷题,不过没有记录下来。
现在才开始进行记录的原因如下:
1)习惯的养成要由简入繁,由浅到深。因此之前仅仅是进行刷题,先培养好工作日每天刷题的习惯,然后再进行刷题记录。如果一开始就做很多事情,很难养成习惯;
2)个人刷题的天数已经超过21天,基本养成了刷题习惯,可以进入现在的这一步,在刷完题目之后对自己的解题思路进行记录;
3)继续遵循习惯的养成规律,这些博客也仅仅是简单地记录个人的解题思路。
题目如上,意思为找出needle字符串在haystack中第一次出现的位置,如果haystack中不包含needle,则返回-1。
这道题首先想到的就是用循环进行解答。
主要思路为: 遍历haystack,找出haystack中与needle首字母一样的位置,如果找到了,那就继续对比haystack的第二个字母与needle的第二个字母是否相同,这样一一对比,如果对比完所有needle中的字母,那就返回haystack刚刚提到的首字母位置,否则继续找下一个haystack中与needle首字母一样的位置。
贴上代码:
class Solution {
public int strStr(String haystack, String needle) {
//当needle的字符数目大于haystack, 那么返回-1
if( haystack.length() < needle.length()){
return -1;
}
//所有字符串的前缀都是"",因此当needle为空或"",返回0
if( needle.length() == 0 || needle == null){
return 0;
}
for( int i = 0 ; i < haystack.length() ; i++){
//依次对字符进行对比, 要注意已经对比的字符长度跟首字母位置之和不能超过haystack字符长度
for( int j = 0 ; j < needle.length() && i + j < haystack.length() ; j++){
if(haystack.charAt(i + j) != needle.charAt(j)){
break;
}
if( j + 1 == needle.length()){
return i;
}
}
}
return -1;
}
}
END