专栏文章
题解:AT_abc214_f [ABC214F] Substrings
AT_abc214_f题解参与者 2已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @miq86upt
- 此快照首次捕获于
- 2025/12/04 00:32 3 个月前
- 此快照最后确认于
- 2025/12/04 00:32 3 个月前
题意
给你一个字符串 ,求去除若干个不相邻的字符后得到的不同的字符串的个数。
思路
考虑 DP, 表示前 位以字母 为结尾的不同字符串的个数。
对于 :
- 若 ,。
- 若 ,。
最后答案就是 。
时间复杂度比 大一点,但是实际上达不到,可以通过此题。
Code
CPP#include<bits/stdc++.h>
#define int long long
#define double long double
#define bug cout<<"___songge888___"<<'\n';
using namespace std;
string s;
int n;
int dp[200010][30];
int get(char c){
return c-'a'+1;
}
int ans;
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>s;
n=s.size();
s=' '+s;
// cout<<get(s[1])<<'\n';
dp[1][get(s[1])]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=26;j++){
if(get(s[i])==j){
for(int k=1;k<=26;k++){
dp[i][j]+=dp[i-2][k];
}
dp[i][j]++;
}
else{
dp[i][j]=dp[i-1][j];
}
dp[i][j]%=1000000007;
}
}
for(int i=1;i<=26;i++){
// cout<<ans<<'\n';
ans+=dp[n][i];
ans%=1000000007;
}
cout<<ans;
return 0;
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...