直接操作显然是不可以的。
由于题目中要求求字母个数,那我们就可以将字符串中每个字母的出现次数存储起来,每次操作 就相当于将每个字母的出现次数都乘以 ,操作 时 直接输出即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7;
long long t[55];
bool f[100005];
signed main () {
int n, q;
cin >> n >> q;
string s;
cin >> s;
for (int i = 0; i < s.size (); i ++) {
t[s[i] - 96] ++;//减96转化为数字。
f[s[i] - 96] = true;
}
char c;
int k, op;
while (q --) {
cin >> op;
if (op == 1) {
cin >> k;
for (int i = 1; i <= 26; i ++) {
if (f[i] == true) {
long long x = t[i];
t[i] += x * k;
t[i] %= mod;
}
}
}
if (op == 2) {
cin >> c;
cout << (t[c - 96] % mod) << endl;
}
}
}