一. 题目

二. 思路

三. 代码

class Solution
{
    static final int M = 30, MOD = (int) 1e9 + 7;
    int[][] f = new int[2][M];

    public int lengthAfterTransformations(String s, int t)
    {
        for (Character c : s.toCharArray())
            ++f[0][c - 'a'];

        for (int i = 1; i <= t; ++i)
            for (int j = 0; j < 26; ++j)//这里是赋值的,不清理当前层也可以
                if (j != 1) f[i & 1][j] = f[i - 1 & 1][j == 0 ? 25 : j - 1] % MOD;
                else f[i & 1][j] = (f[i - 1 & 1][j - 1] + f[i - 1 & 1][25]) % MOD;

        int ans = 0;
        for (int i = 0; i < 26; ++i)
            ans = (ans + f[t & 1][i]) % MOD;
        return ans;
    }
}