国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

[Leetcode] Implement strStr() 實(shí)現(xiàn)StrStr

remcarpediem / 2394人閱讀

摘要:最新更新暴力法復(fù)雜度時(shí)間空間思路本題有很多高級(jí)算法可以在時(shí)間內(nèi)解決問(wèn)題,然而這已經(jīng)超出面試的范疇。本題在面試中出現(xiàn)的作用就是考察基本的編程素養(yǎng),以及邊界條件的考慮。它使用一個(gè)數(shù)組,這個(gè)數(shù)組記錄了模式串自身的前綴和后綴的重復(fù)情況。

Implement strStr() 最新更新:https://yanjia.me/zh/2019/02/...
Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

暴力法 復(fù)雜度

時(shí)間 O(N^2) 空間 O(1)

思路

本題有很多高級(jí)算法可以在O(N)時(shí)間內(nèi)解決問(wèn)題,然而這已經(jīng)超出面試的范疇。本題在面試中出現(xiàn)的作用就是考察基本的編程素養(yǎng),以及邊界條件的考慮。我們用暴力法即可。

代碼
public class Solution {
    public int strStr(String haystack, String needle) {
        int start = 0;
        // 如果剩下的字母不夠needle長(zhǎng)度就停止遍歷
        while(start <= haystack.length() - needle.length()){
            int i1 = start, i2 = 0;
            while(i2 < needle.length() && haystack.charAt(i1)==needle.charAt(i2)){
                i1++;
                i2++;
            }
            if(i2 == needle.length()) return start;
            start++;
        }
        return -1;
    }
}
KMP算法 復(fù)雜度

時(shí)間 O(N+M) 空間 O(M)

思路

KMP算法是較為高級(jí)的算法。它使用一個(gè)next數(shù)組,這個(gè)數(shù)組記錄了模式串needle自身的前綴和后綴的重復(fù)情況。同樣是雙指針進(jìn)行匹配,當(dāng)失配時(shí)可以根據(jù)這個(gè)數(shù)組找到應(yīng)該將模式串向后位移多少位,避免一些重復(fù)的比較。具體的解法這里有兩篇文章比較好,一篇是詳細(xì)講解KMP算法。

如果看完對(duì)產(chǎn)生next數(shù)組的方法還不太明白,還有一篇是講解next數(shù)組怎么得到的。

代碼
public class Solution {
    public int strStr(String haystack, String needle) {
        if(needle.length() == 0){
            return 0;
        }
        int[] next = new int[needle.length()];
        // 得到next數(shù)組
        getNextArr(next, needle);
        // i是匹配串haystack的指針,j是模式串needle的指針
        int i = 0, j = 0;
        // 雙指針開(kāi)始匹配
        while(i < haystack.length() && j < needle.length()){
            // 如果j=-1意味著剛剛失配過(guò),下標(biāo)+1后,下一輪就可以開(kāi)始匹配各自的第一個(gè)了
            // 如果指向的字母相同,則下一輪匹配各自的下一個(gè)
            if(j == -1 || haystack.charAt(i) == needle.charAt(j)){
                i++;
                j++;
            // 如果失配,則將更新j為next[j]
            } else {
                j = next[j];
            }
        }
        return j == needle.length() ? i - j : -1;
    }
    
    private void getNextArr(int[] next, String needle){
        // k是前綴中相同部分的末尾,同時(shí)也是相同部分的長(zhǎng)度,因?yàn)殚L(zhǎng)度等于k-0。
        // j是后綴的末尾,即后綴相同部分的末尾 
        int k = -1, j = 0;
        next[0] = -1;
        while(j < needle.length() - 1){
            // 如果k=-1,說(shuō)明剛剛失配了,則重新開(kāi)始計(jì)算前綴和后綴相同的長(zhǎng)度
            // 如果兩個(gè)字符相等,則在上次前綴和后綴相同的長(zhǎng)度加1就行了
            if (k == -1 || needle.charAt(j) == needle.charAt(k)){
                k++;
                j++;
                next[j] = k;
            } else {
            // 否則,前綴長(zhǎng)度縮短為next[k]
                k = next[k];
            }
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64476.html

相關(guān)文章

  • LeetCode 28:實(shí)現(xiàn)strStr() Implement strStr()

    摘要:愛(ài)寫(xiě)作者愛(ài)寫(xiě)實(shí)現(xiàn)函數(shù)。說(shuō)明當(dāng)是空字符串時(shí),我們應(yīng)當(dāng)返回什么值呢這是一個(gè)在面試中很好的問(wèn)題。對(duì)于本題而言,當(dāng)是空字符串時(shí)我們應(yīng)當(dāng)返回。這與語(yǔ)言的以及的定義相符。利用內(nèi)建函數(shù)直接得結(jié)果。如果子字符串為空,返回。 愛(ài)寫(xiě)bug(ID:icodebugs)作者:愛(ài)寫(xiě)bug 實(shí)現(xiàn) strStr() 函數(shù)。 給定一個(gè) haystack 字符串和一個(gè) needle 字符串,在 haystack 字符...

    alaege 評(píng)論0 收藏0
  • LeetCode 28:實(shí)現(xiàn)strStr() Implement strStr()

    摘要:愛(ài)寫(xiě)作者愛(ài)寫(xiě)實(shí)現(xiàn)函數(shù)。說(shuō)明當(dāng)是空字符串時(shí),我們應(yīng)當(dāng)返回什么值呢這是一個(gè)在面試中很好的問(wèn)題。對(duì)于本題而言,當(dāng)是空字符串時(shí)我們應(yīng)當(dāng)返回。這與語(yǔ)言的以及的定義相符。利用內(nèi)建函數(shù)直接得結(jié)果。如果子字符串為空,返回。 愛(ài)寫(xiě)bug(ID:icodebugs)作者:愛(ài)寫(xiě)bug 實(shí)現(xiàn) strStr() 函數(shù)。 給定一個(gè) haystack 字符串和一個(gè) needle 字符串,在 haystack 字符...

    ivydom 評(píng)論0 收藏0
  • leetcode 28 Implement strStr()

    摘要:如果存在,返回子字符串的在長(zhǎng)字符串的起始點(diǎn)的位置。如果不存在,則返回。就是遍歷長(zhǎng)字符串,并通過(guò)比較字符找到是否存在目標(biāo)子字符串。需要注意一下的就是對(duì)特殊情況的判斷,以減少無(wú)謂的時(shí)間消耗。 題目詳情 Implement strStr().Return the index of the first occurrence of needle in haystack, or -1 if nee...

    Gemini 評(píng)論0 收藏0
  • [LeetCode] Implement strStr()

    Problem Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. Note 有substring,為何不用。 Solution public class Solution { public ...

    fuyi501 評(píng)論0 收藏0
  • leetcode28 Implement strStr() 在字符串中尋找目標(biāo)字符串

    摘要:題目要求在子字符串中尋找目標(biāo)字符串,并返回該字符串第一次出現(xiàn)時(shí)的下標(biāo)在嘗試的寫(xiě)了一提中等難度的題目后,又一次回到簡(jiǎn)單難度的題尋找溫暖思路一在原字符串中中尋找目標(biāo)字符串首字母的下標(biāo),并提取子字符串,若該字符串的開(kāi)頭等于目標(biāo)字符串,則返回該下 題目要求: 在子字符串中尋找目標(biāo)字符串,并返回該字符串第一次出現(xiàn)時(shí)的下標(biāo) 在嘗試的寫(xiě)了一提中等難度的題目后,又一次回到簡(jiǎn)單難度的題尋找溫暖T-T 思...

    FingerLiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<