简单题
jiangxinyang2012 · · 题解
当字符串
所以,我们可以根据字符串
其中,x 出现的次数。
这样,我们就可以枚举排列的最后一个位置,每次
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
const int N = 200005;
const int INF = 0x3f3f3f3f;
using ull = unsigned long long;
const ull base = 131;
char a[N], b[N];
ull pw[N], d[N];
ll f(int l, int r) {
return d[r] - d[l - 1] * pw[r - l + 1];
}
int main() {
scanf("%s%s", a + 1, b + 1);
int n = strlen(a + 1), m = strlen(b + 1);
pw[0] = 1;
for (int i = 1; i <= m; i++) {
pw[i] = pw[i - 1] * base;
}
for (int i = 1; i <= m; i++) {
d[i] = d[i - 1] * base + b[i] - 'a';
}
ll h = 0;
for (int i = 1; i <= n; i++) {
h += pw[a[i] - 'a'];
}
ll h2 = 0;
set<ll> se;
int tot = 0;
for (int i = 1; i <= m; i++) {
h2 += pw[b[i] - 'a'];
if (i > n) h2 = h2 - pw[b[i - n] - 'a'];
if (i >= n && h2 == h) {
se.insert(f(i - n + 1, i));
}
}
printf("%d\n", (int)se.size());
return 0;
}