Solution: Strings Interleaving
Let's analyze the different ways to solve the string interleaving challenge.
Solution #1: Brute force
Press + to interact
class Interleaving {public static boolean findSIRecursive(String m, String n, String p, int mIndex, int nIndex, int pIndex) {// if we have reached the end of the all the Stringsif (mIndex == m.length() && nIndex == n.length() && pIndex == p.length())return true;// if we have reached the end of 'p' but 'm' or 'n' still has some characters leftif (pIndex == p.length())return false;boolean b1 = false, b2 = false;if (mIndex < m.length() && m.charAt(mIndex) == p.charAt(pIndex))b1 = findSIRecursive(m, n, p, mIndex + 1, nIndex, pIndex + 1);if (nIndex < n.length() && n.charAt(nIndex) == p.charAt(pIndex))b2 = findSIRecursive(m, n, p, mIndex, nIndex + 1, pIndex + 1);return b1 || b2;}public static Object findSI(String m, String n, String p) {return findSIRecursive(m, n, p, 0, 0, 0);}public static void main(String args[]) {System.out.println(findSI("abd", "cef", "adcbef"));System.out.println(findSI("abc", "def", "abdccf"));System.out.println(findSI("abcdef", "mnop", "mnaobcdepf"));}};
Explanation
The problem follows the longest common subsequence pattern.
A basic brute-force solution is to try matching m
and n
with p
one letter at a time. Let’s assume mIndex
, nIndex
, and pIndex
represent the current indexes of m
, n
, and p
strings, respectively. Therefore, we have two options at any step:
-
If the letter at
mIndex
matches with the letter atpIndex
, we can recursively match for the remaining lengths ofm
andp
. -
If the letter at
nIndex
matches with the letter atpIndex
, we can recursively match for the remaining lengths ofn
andp
.
Time complexity
The time complexity of the ...