實(shí)現(xiàn) strStr()

題目:

實(shí)現(xiàn) strStr() 函數(shù)。

給定一個(gè) haystack 字符串和一個(gè) needle 字符串,在 haystack 字符串中找出 needle 字符串出現(xiàn)的第一個(gè)位置 (從0開始)。如果不存在,則返回 -1。

說明:

當(dāng) needle 是空字符串時(shí),我們應(yīng)當(dāng)返回什么值呢?這是一個(gè)在面試中很好的問題。

對(duì)于本題而言,當(dāng) needle 是空字符串時(shí)我們應(yīng)當(dāng)返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。

示例:

示例 1:

輸入: haystack = "hello", needle = "ll"
輸出: 2
示例 2:

輸入: haystack = "aaaaa", needle = "bba"
輸出: -1

思路:

個(gè)人思路:先查找needle的第一位字符在haystack中的位置,然后判斷haystack從這個(gè)位置開始到needle長度的字符串是否等于needle,如果是,返回位置;

大神思路:KMP算法,是一種字符串匹配算法,目的就是在出錯(cuò)時(shí),利用原有的匹配信息,盡量減少重新匹配的次數(shù)。
https://leetcode-cn.com/problems/implement-strstr/solution/shen-ru-qian-chu-kmp-suan-fa-yu-ping-jie-by-zohary/

代碼:

class Solution {
    public int strStr(String haystack, String needle) {
        
        int index = -1;
        int nLen = needle.length();
        int hLen = haystack.length();
        if (needle == null || needle.equals("")) return 0;
        for (int i = 0; i < hLen; i++) {
            if (needle.charAt(0) == haystack.charAt(i)) {
                if ((i+nLen)<=hLen && haystack.substring(i,i+nLen).equals(needle)){
                    index = i;
                    break;
                }
            }
        }
        return index;
    }
}

個(gè)人思路,效率低

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/implement-strstr
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容