p1425子串清除accepted
標籤:[顯示標籤]
描述 我們定義字串a是字串b的子串當且僅當我們能在b串中找到a串。現在給你乙個字串a,和另外乙個字串b,要你每次從b串中從左至右找第乙個a串,並從b串中刪除它,直到a串不為b串的子串,問你需要進行幾次刪除操作。
格式 輸入格式
輸入檔案共2行,第一行乙個字串a(長度小於256),第二行乙個字串b。
30%的資料是隨機生成的;
50%的資料滿足輸入檔案大小小於300kb;
100%的資料滿足輸入檔案小於500kb,字串a、b中只會出現英文本母。
輸出格式
輸出檔案只有乙個整數n。
樣例1
樣例輸入1[複製]
abc
abcabcabaabcbccc
樣例輸出1[複製]
5 限制
1 second
提示 樣例說明:abcabcabaabcbccc-> abcabaabcbccc-> abaabcbccc-> ababccc-> abcc
** conan from hnsdfz
【題解】
kmp問題。
找到乙個匹配之後很正常的想法就是把那個匹配刪掉。然後指標往前移動2*模式串的長度(這樣就可以避免後面的串往前移動漏解了);
然後j=0繼續找匹配;
但是直接把它刪掉會超時(s.erase()這個函式);
所以考慮邊讀邊輸入。
直接指標往前移動模式串的長度,然後把新讀入的東西覆蓋在刪掉的串的開頭即可。
當然。不用真的邊讀邊輸入。先整串輸入下來存成temp,然後再模擬輸入就好了。
#include
#include
#include
using
namespace
std;
string s2, s1,temp;
int f[200000];
int main()
int i = 0, j = 0, num = 0,top =0,now = 0;
cin >> temp;//先整串讀入下來
int mt = temp.size();
s1 = temp;//用乙個top指向當前已經讀到**了。
while (true)
while (j && s2[j] != s1[i]) j = f[j];
if (s2[j] == s1[i]) j++;//kmp演算法
if (j == len2)
else
i++;
if (now == mt)//如果已經讀到最後一位了。則結束。
break;//如果是在最後一位匹配,那麼之前也都不會受到影響了。所以可以大膽的結束
}printf("%d\n", num);
return
0;}
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%i64d",&x)
typedef pair pii;
typedef pairpll;
const
int dx[9] = ;
const
int dy[9] = ;
const
double pi = acos(-1.0);
const
int maxn = 20e4;
string a,b;
int lena,lenb,f[maxn],i = 1,top = 1,j = 1,now = 1,ans = 0;
string s;
int main()
s = b;//一開始s是乙個空的字串;得隨便給他賦值乙個東西;
while (true)
while (j>1 && s[i]!=a[j]) j = f[j];
if (s[i]==a[j])
j++;
if (j>lena)
else
i++;
if (now>lenb)
break;
}cout
<< ans << endl;
return
0;}
Vijos1425子串清除 題解
vijos1425子串清除 題解 描述 我們定義字串a是字串b的子串當且僅當我們能在b串中找到a串。現在給你乙個字串a,和另外乙個字串b,要你每次從b串中從左至右找第乙個a串,並從b串中刪除它,直到a串不為b串的子串,問你需要進行幾次刪除操作。輸入格式 輸入檔案共2行,第一行乙個字串a 長度小於25...
vijosP1567子串計數
描述 現在有乙個字串,請求出這個字串不相同的子串個數。yxy現在不會做,請你來幫忙 n 20w 題解 字尾陣列裸題,其實我在練習模板寫對了沒 1 include2 include3 include4 include5 include6 include7 include8 include9 inclu...
COdevs1425最長公共子串
題目描述 description 輸入n 2 n 20 個字串,輸出最長公共子串。輸入描述 input description 輸入n再輸入n個字串 輸出描述 output description 輸出最大公共子串。樣例輸入 sample input 3abce cabk jaab 樣例輸出 sam...