题意:
给定一个字符串,求删除任意两个相邻的字符能产生多少种不同的字符串。
分析:
开始用unordered_map哈希表做的,MLE了,分析一下怎样会产生重复的字符串,发现只要具有aba这种形式的字符子串,删去ab和删去ba是一样的,因此只需要计算aba形式子串的个数就可以了。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
string s;
cin>>s;
int ans=n-1;
for(int i=1;i<s.size()-1;i++)
{
if(s[i-1]==s[i+1]) ans--;
}
cout<<ans<<'\n';
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}