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

 

posted @ 2018-04-02 10:31  sysu_kww  阅读(188)  评论(0编辑  收藏  举报