题目: 有一个字符串S,长度为n,现在要对其作变换。变换的规则如下:对于第i(1<=i<=n)个字符,可以保持不变,或者变换为第i-1个字符(如果有的话)或者第i+1个字符(如果有的话)。
请计算一下最多可以变换出多少种不同的字符串,最后总数对 1000000007(109+7) 取余后输出。
样例解释:
样例1中,变换出来的字符串是aa, ag, ga,和 gg。
样例2中,只能变换出aa。
输入 多组测试数据。 第一行有一个整数T(1 ≤ T ≤ 128),表示测试数据的数目。 接下来有T组数据。 每一数据给出一个字符串S(1<=|S|<=1000,只由小写字母组成)。 输出 对于每一组数据,输出一个整数表示答案,占一行。 输入样例 样例输入1 2 ag aa 输出样例 样例输出1 4 1 解法: 统计每个位置可以变得个数,然后相乘即可 代码:
#include<iostream>
#include<set>
#include<string>
using namespace std;
long long mod = 1e9 + 7;
long long solve(string s)
{
int l = s.length();
long long ans = 1;
for(int i = 0; i < l; i++){
set<char> c;
if(i - 1 >= 0)
c.insert(s[i - 1]);
c.insert(s[i]);
if(i + 1 < l)
c.insert(s[i + 1]);
ans = (ans * c.size()) % mod;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
string s;
cin >> s;
printf("%lld\n",solve(s));
}
return 0;
}he