字符串常用處理方法

  說起算法中的字符串畔规,需要知道幾個技巧。首當(dāng)其沖的是kmp算法,這個算法很神奇瓣蛀,子字符串是否存在于源字符串中乞娄,原本我們需要兩個for循環(huán)惧互,每次遍歷鳍刷,發(fā)現(xiàn)子字符串與源字符串不相同,就從子字符串的首個位置從新開始比較理盆,這其實很浪費時間瞻讽。
  那有沒有什么方法可以不用從頭開始呢?這就要說起kmp算法了熏挎,這個算法的精髓就是要額外使用一個next數(shù)組記錄如果子字符串與源字符串不同時速勇,重新開始的位置。next數(shù)組的原理坎拐,簡單來說就是根據(jù)字符串前綴和后綴相匹配的最大長度烦磁。建議不懂的同學(xué)可以參考這篇文章养匈。

http://kb.cnblogs.com/page/176818/
下面是代碼實現(xiàn)

//獲得next數(shù)組,利用遞歸方法
void getnext(char *str,int len,int next[]){
    int index=1,n =0 ;//n count the next[]
    next[0] = 0;
    for (index = 1;index<len;index++){
        while(n>0 && str[index] != str[n])
            n = next[n-1];
        if(str[index] == str[n])
            n++;
        next[index] = n;
    }
}
bool kmp(char *src, char *str,int lena,int lenb)
{
    int next[len];
    int j=0;
    getnext(str,lena,next);
    for(int i=0;i<lenb;i++){
        while (j>0 && src[i] != str[j])
            j = next[j-1];
        if (str[j] == src[i])
            j++;
        if (j == lena){
            cout<<i-lena+1<<endl;
            return true;
        }
    }
}
  1. 常用的技巧有字符串拼接
  • 按字典序輸出一個字符串?dāng)?shù)組都伪,[abc,ab,de,mn]
bool cmp(string str1,string str2)
{
    return str1+str2>str1+str2
}

并不是一個字符串與另一個字符串比較呕乎,還是兩個鏈接起來進(jìn)行比較。

  • 查看一個str1是不是str2的旋轉(zhuǎn)后的字符串陨晶,例如“abcdef” 和 “defabc”
bool check(string str1,string str2){
    string str3 = str1+str1;
    return kmp(str2,str3);//利用kmp進(jìn)行判斷
}
  1. 除此之外還有字符串的旋轉(zhuǎn)猬仁,例如“i am a boy”轉(zhuǎn)換成“boy a am i”
  • 旋轉(zhuǎn)整個字符串“yob a ma i”
  • 對每個單詞進(jìn)行旋轉(zhuǎn)“boy a am i”

至于其他的字符串技巧,待續(xù)~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末先誉,一起剝皮案震驚了整個濱河市湿刽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褐耳,老刑警劉巖诈闺,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铃芦,居然都是意外死亡雅镊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門刃滓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仁烹,“玉大人,你說我怎么就攤上這事咧虎∽跨郑” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵老客,是天一觀的道長僚饭。 經(jīng)常有香客問我震叮,道長胧砰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任苇瓣,我火速辦了婚禮尉间,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘击罪。我一直安慰自己哲嘲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布媳禁。 她就那樣靜靜地躺著眠副,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竣稽。 梳的紋絲不亂的頭發(fā)上囱怕,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天霍弹,我揣著相機與錄音,去河邊找鬼娃弓。 笑死典格,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的台丛。 我是一名探鬼主播耍缴,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挽霉!你這毒婦竟也來了防嗡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤炼吴,失蹤者是張志新(化名)和其女友劉穎本鸣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硅蹦,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡荣德,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了童芹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮瞻。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖假褪,靈堂內(nèi)的尸體忽然破棺而出署咽,到底是詐尸還是另有隱情,我是刑警寧澤生音,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布宁否,位于F島的核電站,受9級特大地震影響缀遍,放射性物質(zhì)發(fā)生泄漏慕匠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一域醇、第九天 我趴在偏房一處隱蔽的房頂上張望台谊。 院中可真熱鬧,春花似錦譬挚、人聲如沸锅铅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盐须。三九已至,卻和暖如春漆腌,著一層夾襖步出監(jiān)牢的瞬間贼邓,已是汗流浹背姨蟋。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留立帖,地道東北人眼溶。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像晓勇,于是被迫代替她去往敵國和親堂飞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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

  • Swift字符串常用操作總結(jié) 版本2:增加了Swift 2.0的語法绑咱,與Swift 1.2的語法相比绰筛,主要是:ad...
    對面來個小胖子閱讀 422評論 0 0
  • 以下有關(guān)字符串的常用操作都可直接復(fù)制到Xcode中進(jìn)行驗證,如發(fā)現(xiàn)錯誤,請在評論區(qū)留言指正! 1.字符串的定義 v...
    十元不賣閱讀 1,386評論 0 3
  • //將字符串分割 返回一個數(shù)組 定義字符串$str $str = "apple,pear,banana,orang...
    真實的謊言_d80c閱讀 517評論 0 0
  • 一、String類 String類在java.lang包中描融,java使用String類創(chuàng)建一個字符串變量铝噩,字符串變...
    wlw_花田半畝閱讀 436評論 0 1
  • 我跟朋友說我想他了,她說如果可以窿克,你可以把你每次想他時候的事寫下來骏庸,推薦了我這個APP,于是年叮,以后我只要想他了具被,...
    TRISTA520閱讀 173評論 0 0