题目传送门

题解:

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]]);
        }
    }
View Code

相关文章: