思路:
可以发现,直接能匹配就匹配是最优的。
直接用字符串hash来判断
c o d e code code
#include<iostream>
#include<cstdio>
#define ll unsigned long long
using namespace std;
const ll mod1 = 998244353, mod2 = 1e9 + 7;
ll t;
ll p[1000010], p1[1000010];
int main() {
cin>>t;
p[0] = p1[0] = 1ull;
for(ll i = 1; i <= 1e6; i ++)
p[i] = p[i - 1] * mod1, p1[i] = p1[i - 1] * mod2;
while(t --) {
string s;
cin>>s;
ll len = s.size(), ans = 0;
ll s1 = 0ull, s2 = 0ull, l = 0, s3 = 0, s4 = 0;
for(ll i = 0; i < len / 2; i ++) {
l ++;
s1 = s1 * mod1 + s[i] - 'a' + 1ull;
s2 = (s[len - i - 1] - 'a' + 1ull) * p[l - 1] + s2;
s3 = s3 * mod2 + s[i] - 'a' + 1ull;
s4 = (s[len - i - 1] - 'a' + 1ull) * p1[l - 1] + s4;
if(s1 == s2 && s3 == s4) {
s1 = s2 = s3 = s4 = 0;
ans += 2;
l = 0;
}
}
if(s1 == 0 && len % 2 == 0)
cout<<ans<<endl;
else cout<<ans + 1<<endl;
}
return 0;
}