倒著處理的思維--包含字串匹配和九度1510 替換空格 劍指offer03

來源:互聯網
上載者:User

標籤:

倒著來是處理字串等的一個不錯的技巧。舉個例子,和這道題無關的,但是難度和意義都是更好的。

比如非完全符合,就是差一個字元不匹配

那麼其實有一種複雜度還不錯的做法:

模式串:aacb

需要匹配的字串:

1、aamb

2、acb

3、aamdb

這個時候其實可以先正向匹配,算出來匹配的字元的個數p1,再反向匹配,算出來匹配的個數p2,然後看p1+p2與模式串的長度的關係

恩,以上...還沒做過具體題目

再看這道題,也是倒著處理字串的思路:O(n)處理掉

#include <cstdio>#include <cstring>#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int SIZE = 1000000+1;char str[SIZE];char ans[SIZE*2];int leng;void solve(){    leng = strlen(str);    int blank = 0;    for(int i=0;i<leng;i++){        if(str[i] == ' ')blank++;    }    int ansleng = blank*2+leng;    int oldptr = leng-1;    int newptr = ansleng-1;    ans[ansleng] = '\0';    while(oldptr>=0){        if(str[oldptr] == ' '){            ans[newptr]='0';            ans[--newptr]='2';            ans[--newptr]='%';        }else{            ans[newptr]=str[oldptr];        }        //cout << newptr << "  " << oldptr << endl;        --newptr;        --oldptr;    }    printf("%s\n",ans);}int main(){    //freopen("03.txt","r",stdin);    while(cin.getline(str,SIZE)){        //cout << str << endl;        solve();    }    return 0;}



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

倒著處理的思維--包含字串匹配和九度1510 替換空格 劍指offer03

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.