题目大意
给定一串字符串,随机删除两个相邻的字符,请问最后得到的字符串有多少种
样例
input
7
6
aaabcc
10
aaaaaaaaaa
6
abcdef
7
abacaba
6
cccfff
4
abba
5
ababa
output
4 1 5 3 3 3 1
题目分析
首先如果没有删除后一样的字符串,他的答案为n-1,如果有滑动后还能相同的字符串就再减一,首先aaaaa中他的初始答案为4,可以发现当他滑动时,会出现3种结果相同的字符串,开始我认为如果a1a2=a2a3,就减一,后来看到ababa时,发现这样的结果为4,因此错误,在ababa中删掉s1s2=删掉s2s3,原因在于s1=s3,让他们留下来的字符串相同。
代码
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n;
string s;
cin>>n>>s;
int ans1=n-1;
for(int i=0;i<s.size()-1;i++)
{
if(s[i]==s[i+2]) ans1--;
}
cout<<ans1<<endl;
}
int main()
{
int k;
cin>>k;
while(k--) solve();
return 0;
}