解析:
设f[i]:表示前i个字符组成相似字符串的个数
当a[i]==a[i-1] f[i]=f[i-1] 因为a[i]和a[i-1]无法交换
当a[i]!=a[i-1] f[i]=f[i-1]+f[i-2] 分别表示可以交换和不交换
不交换f[i-1],可以交换f[i-2]
#include <bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
typedef long long ll;
int t,n;
ll f[200005];
string s[200005];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++) cin>>s[i];
memset(f,0,sizeof f);
f[0]=1;f[1]=1;
for(int i=2;i<=n;i++){
if(s[i]==s[i-1]) f[i]=f[i-1];
else{
f[i]=(f[i-1]+f[i-2])%MOD;
}
}
cout<<f[n]%MOD<<endl;
}
return 0;
}