题解:
id[ i ][ j ] 代表的是在第j个位置之后的第i个字符的位置在哪里。
dp[ i ][ j ][ k ] 代表的是 第一个串匹配到第i个位置, 第二个串匹配到第j个位置, 第三个串匹配到第k个位置之后,最后面一个字符的位置在哪里。
如果题目只询问一次,那么应该很容易想到n^3的写法。
for(int i = 0; i <= n1; ++i){ for(int j = 0; j <= n2; ++j){ for(int k = 0; k <= n3; ++k){ if(i+j+k) dp[i][j][k] = n + 1; if(i) dp[i][j][k] = min(dp[i][j][k], id[ss[0][i]-'a'][dp[i-1][j][k]]); if(j) dp[i][j][k] = min(dp[i][j][k], id[ss[1][j]-'a'][dp[i][j-1][k]]); if(k) dp[i][j][k] = min(dp[i][j][k], id[ss[2][k]-'a'][dp[i][j][k-1]]); } }