Censor

frog is now a editor to censor so-called sensitive words (敏感词).

She has a long text w and remove it.

frog repeats over and over again. Help her do the tedious work.

Input

The input consists of multiple tests. For each test:

The first line contains p.

(w,p consists of only lowercase letter)

Output

For each test, write 1 string which denotes the censored text.

Sample Input

abc

aaabcbc

b bbb

abc ab

Sample Output

a

ab

 

// 题意:第一行一个敏感词,然后一行文本,操作如下,删除敏感词,然后如果又新组成敏感词, 重复删掉,直到没有敏感词

 

//如果用KMP和模拟链表的话,就是如果匹配成功了,用链表删除后,再回退lent长度继续匹配,有点麻烦,貌似还可以hash做

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <string.h>
 5 using namespace std;
 6 const int MX=5000010;
 7 
 8 int lens,lent;
 9 char T[MX];
10 char S[MX];
11 int l[MX];
12 int r[MX];
13 int fail[MX];
14 
15 void getfail()
16 {
17     int i,j;
18     i=1,j=0;
19     fail[1]=0;
20     while(i<lent)
21     {
22         if (j==0||T[i]==T[j])
23         {
24             i++,j++;
25             fail[i]=j;
26         }
27         else j = fail[j];
28     }
29 }
30 
31 void kmp()
32 {
33     int i=1;
34     int j=1;
35     while(i<=lens&&j<=lent)
36     {
37         if (j==0||S[i]==T[j])
38         {
39             i=r[i];
40             j++;
41         }
42         else j = fail[j];
43 
44         if (j>lent)
45         {
46             int num=0;
47             int pos=i;
48             while (num<lent)
49             {
50                 pos = l[pos];
51                 num++;
52             }
53             r [ l[ pos ] ] = i;
54             l [ i ] = l[ pos ];
55             
56             num=0;
57             pos=i;
58             while (num<lent)
59             {
60                 if (l[pos]==0) break;
61                 pos = l[pos];
62                 num++;
63             }
64             j=1;
65             i = pos;
66         }
67     }
68 }
69 
70 int main()
71 {
72     while(scanf("%s",T+1)!=EOF)
73     {
74         scanf("%s",S+1);
75         lens = strlen(&S[1]);
76         lent = strlen(&T[1]);
77 
78         getfail();
79 
80         for (int i=0;i<=lens+1;i++)
81         {
82             l[i] = i-1;
83             r[i] = i+1;
84         }
85 
86         kmp();
87         for (int i = r[0];S[i];i = r[i])
88         {
89             printf("%c",S[i]);
90         }
91         printf("\n");
92     }
93     return 0;
94 }
View Code

相关文章:

  • 2022-12-23
  • 2019-12-09
  • 2021-10-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2022-12-23
  • 2021-05-23
相关资源
相似解决方案