97. Interleaving String
Posted skillking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了97. Interleaving String相关的知识,希望对你有一定的参考价值。
一、题目
1、审题
2、分析
给出三个字符串,判断 s3 是否可以由 s1 与 s2中的字符交错形成。
二、解答
1、思路:
采用一个动态布尔型二维数组 matrix 记录匹配情况。matrix[0][0] 初值为 true。
①、先初始化 matrix 第一行、第一列。
②、matrix[i][j] = true : 代表 s2 的前 i 个字符 + s1 的前 j 个字符成功匹配了 s3 的前 i+j 个字符。(注意字符串下标从 0 开始)
public boolean isInterleave3(String s1, String s2, String s3) { int n1 = s1.length(); int n2 = s2.length(); if(n1 + n2 != s3.length()) return false; boolean[][] matrix = new boolean[n2+1][n1+1]; matrix[0][0] = true; // matrix[i][0] : 代表 s2的第 i 个字符是否与 s3 的第 i 个字符对应。 for (int i = 1; i <= n2; i++) // 第一列 ,判断 s2 与 s3 是否一一对应 matrix[i][0] = matrix[i-1][0] && (s2.charAt(i-1) == s3.charAt(i-1)); // matrix[0][i] : 代表 s1 的第 i 个字符是否与 s3 的第 i 个字符对应。 for(int i = 1; i <= n1; i++) // 第一行,判断 s1 与 s3 是否一一对应 matrix[0][i] = matrix[0][i-1] && (s1.charAt(i-1) == s3.charAt(i-1)); // matrix[i][j] = true : 代表 s2 的前 i 个字符 + s1 的前 j 个字符成功匹配了 s3 的前 i+j 个字符。 for (int i = 1; i <= n2; i++) { for (int j = 1; j <= n1; j++) { matrix[i][j] = (matrix[i-1][j] && (s2.charAt(i-1) == s3.charAt(i+j-1))) || (matrix[i][j-1] && (s1.charAt(j-1) == s3.charAt(i+j-1))); } } return matrix[n2][n1]; }
以上是关于97. Interleaving String的主要内容,如果未能解决你的问题,请参考以下文章