dp[i][j] = 星0?iの入り口jから入れる累計数として、動的計画法を行う。

string s, t;
// 略  
dp[0][s[0]-'a'] = 1;
for ( int i = 1; i < n; i++ ){
  dp[i][s[i]-'a'] = (dp[i][s[i]-'a'] + dp[i-1][t[i]-'a']) % M;
  for ( int j = 0; j < 26; j++ ) dp[i][j] = (dp[i][j] + dp[i-1][j]) % M;
}
// dp[n-2][t[n-1]-'a'] が答え

dp[i][j]はdp[j]に省略することが可能。

dp[s[0]-'a'] = 1;
for ( int i = 1; i < n-1; i++ ){
  dp[s[i]-'a'] = (dp[s[i]-'a'] + dp[t[i]-'a']) % M;
}
// dp[t[n-1]-'a'] が答え