Codeforces 385(#226 Div2 only) B. Bear and Strings
問題
文字列sが与えられる。
文字列sのi文字目からj文字目を抜き出したものをs(i, j)とする。
s(i, j)のうち"bear"を連続する部分文字列として含むものはいくつあるか答えよ。
制約条件
sの長さ≦5000
方針
sの始点iは全通りためす。
jを右に動かしていて、何文字一致したかのカウントを増やしていって、一旦4文字一致したらそれ以降のjは全部有効。
みたいな感じでやったらオートマトンの作り方を間違えてbeabearみたいなのでマッチしないとかやってしまって闇。
ソースコード
string s; int main(){ cin >> s; int ans = 0; int n = s.size(); rep(i, n){ int cnt = 0; bool ok = 0; for(int j = i; j < n; j++){ if(s[j] == "bear"[cnt]) cnt++; else{ cnt = 0; if(s[j] == 'b') cnt++; } if(cnt >= 4) ok = 1; if(ok) ans++; } } cout << ans << endl; return 0; }