欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 动态规划两个数组dp问题系列一>交错字符串

动态规划两个数组dp问题系列一>交错字符串

2025/4/21 16:17:40 来源:https://blog.csdn.net/robin_suli/article/details/145622097  浏览:    关键词:动态规划两个数组dp问题系列一>交错字符串

这里写目录标题

  • 状态表示:
  • 状态转移方程:
  • 初始化:
  • 填表顺序:
  • 返回值:
  • 代码呈现:

状态表示:

这里是引用

状态转移方程:

这里是引用

初始化:

这里是引用

填表顺序:

这里是引用

返回值:

我们研究时的范围到i,j,要推及到整个范围,所以返回dp[m][n]

代码呈现:

class Solution {public boolean isInterleave(String ss1, String ss2, String ss3) {int m = ss1.length(),n = ss2.length(),k = ss3.length();ss1 = " "+ ss1; ss2 = " "+ ss2; ss3 = " " + ss3;if(m + n != k) return false;char[] s1 = ss1.toCharArray(); char[] s2 = ss2.toCharArray(); char[] s3 = ss3.toCharArray();//预处理方便对应下标boolean[][] dp = new boolean[m+1][n+1];//初始化dp[0][0] = true;//s1和s2都为空,第一个位置为truefor(int i = 1; i <= n; i++){if(s2[i] == s3[i])dp[0][i] = true;else break;}for(int j = 1; j <= m; j++){if(s1[j] == s3[j])dp[j][0] = true;else break;}for(int i = 1; i <= m; i++)for(int j = 1; j <= n; j++){// if(s1[i] == s3[i+j] && dp[i-1][j] == true) //     dp[i][j] = dp[i-1][j];// else if(s2[j] == s3[i+j] && dp[i][j-1] == true)//     dp[i][j] = dp[i][j-1];dp[i][j] = (s1[i] == s3[i + j] && dp[i - 1][j]) || (s2[j] == s3[i+j] && dp[i][j - 1]);}return dp[m][n];    }
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词