標籤:
倒著來是處理字串等的一個不錯的技巧。舉個例子,和這道題無關的,但是難度和意義都是更好的。
比如非完全符合,就是差一個字元不匹配
那麼其實有一種複雜度還不錯的做法:
模式串: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