题目:3335. 字符串转换后的长度 I
思路:题解参考它的进阶版:(nice!!!)(LeetCode ) 3337. 字符串转换后的长度 II (矩阵快速幂优化 DP)
只需修改nums
class Solution {
static const int N=26;
const int Mod=1000000007;
void mull(int a[][N] ,int b[][N] ) {
int t[N][N]={0};
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
t[i][j]=(t[i][j]+(long long)a[i][k]*b[k][j])%Mod;
}
}
}
memcpy(a,t,sizeof t);
}
void solve(int m[N][N] ,int n,int mt[N][N] ) {
int t[N][N]={0};
for(int i=0;i<N;i++){
t[i][i]=1;
}
while(n){
if(n&1){
mull(t,m);
}
n>>=1;
mull(m,m);
}
memcpy(mt,t,sizeof t);
}
public:
int lengthAfterTransformations(string s, int t) {
int m[N][N]={0};
for(int i=0;i<N-1;i++){
m[i][i+1]=1;
}
m[N-1][0]=1,m[N-1][1]=1;
int mt[N][N]={0};
solve(m,t,mt);
int ct[N]={0};
for(auto x:s){
ct[x-'a']++;
}
long long ans=0;
for(int i=0;i<N;i++){
long long t=0;
for(int j=0;j<N;j++){
t=(t+mt[i][j])%Mod;
}
ans=(ans+t*ct[i])%Mod;
}
return (int)ans;
}
};