(紀中)2194. censor【棧模擬】

(File IO): input:censor.in output:censor.out
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
Goto ProblemSet


題目描述
農民約翰已經爲他的奶牛訂好了GoodHooveskeepingGood Hooves keeping 雜誌,使他們有足夠的材料看。不幸的是,最新的一期載有關於如何煮完美的牛排的文章,而FJFJ不想他的奶牛看到這篇相當不雅的文章(顯然,這本雜誌是需要更好的編輯監督的)。
FJFJ 從該雜誌採取了所有文字,創建了長度小於等於10610^6 的字符串ss。從此,他想刪除一個子串TT來審查不當內容。要做到這一點,農民約翰找到SS 中出現的TT 並將其刪除。然後,他再次重複這個過程,刪除出現的TT,一直持續到沒有出現TTSS。注意,刪除一次後可能會創建一個新的TT出現,這個T是以前不存在的。
請輸出審查完畢後,FJFJ 所確定 的SS的最終內容。


輸入
第一行將包含SS
第二行包含TTTT 的長度最多是SS 的長度,SSTT 的所有字符均爲小寫字母(範圍a..za..z

輸出
全部刪除完成後的SS。保證使得SS 在刪除過程中不會成爲空。


樣例輸入
whatthemomooofun
moo

樣例輸出
whatthefun


數據範圍限制


解題思路
這道題其實就是一個棧。每次壓一個字符進去,再判斷後lengthtlength(t)個字符是不是等於tt,是就彈棧。
在這裏插入圖片描述


代碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
string s,t,s1;
int l,len;
bool p;
char c[1000000];
int main(){
	freopen("censor.in","r",stdin);
    freopen("censor.out","w",stdout);
	cin>>s;
	cin>>t;
    l=-1;
    len=s.size();
	for(int i=0;i<len;i++)
	{
        l++; 
        if((s[l]==t[t.size()-1])&&(l>=t.size()-1)) 
		{
        	p=1;
            for(int j=l-t.size()+1;j<=l;j++) 
            {
            	if(s[j]!=t[j-(l-t.size()+1)])
				{
                    p=0;
                    break;
                }
			}
            if(p)
            {
            	s.erase(l-t.size()+1,t.size());
				l=l-t.size();
			}
        }
    }	
    //for(int i=0;i<=l;i++)
//		s1=s1+c[i];
    cout<<s;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章