字符串匹配-Sunday算法

Sunday算法

匹配原理

從前往后匹配瞧壮,如果遇到不匹配情況,則查看母串S中參與匹配的最后一位的下一位字符匙握,記做C咆槽,如果C出現(xiàn)在模板串T中,選擇模板串中C最右出現(xiàn)的位置對(duì)齊圈纺;如果C沒有出現(xiàn)在模板串T中秦忿,直接跳過該匹配區(qū)域。

算法演示

母串S:? S E A R C H S U B S T R I N G
模板串T:S U B S T R I N G

開始匹配:


開始匹配.png

匹配成功蛾娶,開始下一次匹配:

下一次匹配.png

匹配失數埔ァ:
查找母串S參與匹配的最后一位字符的下一字符,基黃色的S蛔琅;
在T中胎许,字符’S’出現(xiàn)兩次,按照原理罗售,選擇T中最右位置出現(xiàn)的’S’進(jìn)行對(duì)齊辜窑,那么可以得到:


匹配失敗.png

假設(shè)母串S為:S E A R C H S U B Z T R I N G
那么當(dāng)匹配到上述情況時(shí),字符’Z’在T中沒有出現(xiàn)寨躁,那么就可以得到下面的情況:


匹配失敗.png

可以看到穆碎,當(dāng)匹配失敗時(shí),跳過的區(qū)域很大职恳。

代碼如下:

/**
     *
     * @param S 母串
     * @param T 模式串
     * @return
     */
    static int sunday(String S, String T){
        int[] moveLen = getMoveLength(T);

        int i=0; // S 下標(biāo)
        int j =0;// T 下標(biāo)
        while (j<T.length() && i<S.length()){

            for(j=0; j<T.length() && i+j <S.length() && S.charAt(i+j)==T.charAt(j); ++j) ;

            // 匹配成功
            if(j == T.length()) return i;

            // S中沒有找到含T的字符串
            if(i+T.length() >= S.length()) return -1;

            //移動(dòng)S的索引
            i += moveLen[S.charAt(i+T.length())];

        }
        return -1;

    }

    static int[] getMoveLength(String T){
        int[] moveLen = new int[256]; // 字符的種類數(shù)目
        //   默認(rèn)S中的任何字符均不出現(xiàn)在T中所禀,那么每次移動(dòng)的距離為T的長(zhǎng)度 + 1
        for(int i=0; i<moveLen.length; ++i){
            moveLen[i] = T.length() + 1;
        }

        //查找能夠出現(xiàn)在T中的字符,若一個(gè)字符出現(xiàn)多次话肖,選擇最右位置的字符北秽,所以T的下標(biāo)遍歷從0開始
        for(int i=0; i<T.length(); i++){
            moveLen[T.charAt(i)] = T.length() - i;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市最筒,隨后出現(xiàn)的幾起案子贺氓,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辙培,死亡現(xiàn)場(chǎng)離奇詭異蔑水,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扬蕊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門搀别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尾抑,你說我怎么就攤上這事歇父。” “怎么了再愈?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵榜苫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我翎冲,道長(zhǎng)垂睬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任抗悍,我火速辦了婚禮驹饺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缴渊。我一直安慰自己赏壹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布疟暖。 她就那樣靜靜地躺著卡儒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俐巴。 梳的紋絲不亂的頭發(fā)上骨望,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音欣舵,去河邊找鬼擎鸠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缘圈,可吹牛的內(nèi)容都是我干的劣光。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼糟把,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绢涡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遣疯,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤雄可,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體数苫,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聪舒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虐急。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箱残。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖止吁,靈堂內(nèi)的尸體忽然破棺而出被辑,到底是詐尸還是另有隱情,我是刑警寧澤赏殃,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布敷待,位于F島的核電站,受9級(jí)特大地震影響仁热,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勾哩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一抗蠢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧思劳,春花似錦迅矛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至威兜,卻和暖如春销斟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椒舵。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工蚂踊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笔宿。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓犁钟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泼橘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涝动,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 字符串匹配(查找)算法是一類重要的字符串算法(String Algorithm)。有兩個(gè)字符串, 長(zhǎng)度為m的hay...
    曾會(huì)玩閱讀 3,809評(píng)論 4 8
  • 在挖掘分析的過程當(dāng)中對(duì)字符串的處理是極為重要的炬灭,且出現(xiàn)也較為頻繁醋粟,R語言作為當(dāng)前最為流行的開源數(shù)據(jù)分析和可視化平臺(tái)...
    果果哥哥BBQ閱讀 5,793評(píng)論 0 8
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,212評(píng)論 0 4
  • 15年7月10日是們?cè)谝黄鸬娜兆樱緪矍榈淖畛鯌?yīng)該是美好的,只是開始卻別人都不一樣 一開始昔穴,就覺得你是可以陪我走...
    摩尼古丁閱讀 252評(píng)論 0 0
  • 比笨更可怕的是自以為聰明 作者:李筱懿 公眾號(hào):麥子熟了 文章解讀: 作者介紹了自己耍小聰明和普朗克司機(jī)表演的經(jīng)歷...
    一念_花開閱讀 226評(píng)論 0 0