题解 | #交错编号# java

交错编号

https://www.nowcoder.com/practice/07f674168c784a84a264cf487396daed

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s1 string字符串
     * @param s2 string字符串
     * @param s3 string字符串
     * @return bool布尔型
     */
    public boolean isInterleave(String s1, String s2, String s3) {
        int n = s1.length();
        int m = s2.length();
        int t = s3.length();

        if (n + m != t) {
            return false;
        }

        boolean[][] f = new boolean[n + 1][m + 1];
        f[0][0] = true;

        for (int i = 0; i <= n; ++i) {
            for (int j = 0; j <= m; ++j) {
                int p = i + j - 1;
                if (i > 0) {
                    // 如果s1的前i-1个字符和s2的前j个字符能够交错组成s3的前p个字符,
                    // 并且s1的第i个字符等于s3的第p个字符,则s1的前i个字符和s2的前j个字符能够交错组成s3的前p+1个字符
                    f[i][j] = f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) == s3.charAt(p));
                }
                if (j > 0) {
                    // 如果s1的前i个字符和s2的前j-1个字符能够交错组成s3的前p个字符,
                    // 并且s2的第j个字符等于s3的第p个字符,则s1的前i个字符和s2的前j个字符能够交错组成s3的前p+1个字符
                    f[i][j] = f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) == s3.charAt(p));
                }
            }
        }

        return f[n][m];
    }
}

该代码使用的编程语言是Java。

代码考察的知识点包括动态规划和字符串操作。

代码的文字解释大纲如下:

  1. 代码的目标:判断字符串s3是否由字符串s1和s2交错组成。
  2. 输入参数:s1、s2和s3分别表示三个字符串。
  3. 返回值:布尔型,表示s3是否由s1和s2交错组成。
  4. 首先,获取字符串s1、s2和s3的长度n、m和t。
  5. 如果s1和s2的长度之和不等于s3的长度t,则返回false,因为无法满足交错组成的条件。
  6. 创建一个二维布尔数组f,大小为(n+1)×(m+1),用于记录子问题的结果。
  7. 初始化f[0][0]为true,表示空字符串可以由空字符串组成。
  8. 使用两层循环遍历所有可能的交错组合情况。
  9. 在每个位置(i, j)上,计算当前交错组合是否成立。
  10. 假设当前位置对应的s3的索引为p = i + j - 1。
  11. 如果i大于0,表示s1还有字符可供选择,那么需要判断s1的第i个字符是否与s3的第p个字符相等,同时前一个位置也能够形成交错组合,即f[i-1][j]为true。
  12. 如果j大于0,表示s2还有字符可供选择,那么需要判断s2的第j个字符是否与s3的第p个字符相等,同时前一个位置也能够形成交错组合,即f[i][j-1]为true。
  13. 将以上两个情况的结果求逻辑或,并赋值给f[i][j],表示当前位置是否能够形成交错组合。
  14. 循环结束后,返回f[n][m]的值作为最终结果,表示整个字符串s3是否能够由s1和s2交错组成。
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务