It is easier, more readable, and straight to divide s3 into s1 and s2 (than reverse process). You only need one function to take 2 arrays and return an new array (then use it as an input array in the same function call).
Let us take a simple example
Given s1=12, s2=ab, and s3=a1b2
First function call:
initial input {} and {a,/}
return {a,/}
second function call:
input {a,/} and {1,/}
return {a1,a/,/1,//}
third call :
input ... and {b,/}
return ...
fourth call
input ... and {2,/}
return ...
after all characters in s3 processed, you should get 2**4=16 (assume you do not cut any invalid element in return array during whole process, which you should do for resource saving and performance enhance) elements in the final return array.
a1b2, a1b/, a1/2, a1//,
a/b2, a/b/, a//2, a///,
/1b2, /1b/, /1/2, /1//,
//b2, //b/, ///2,
Remove all / in each element and delete invalid elements as s1 or s2, you see 2 valid elements left, one is ab and the other is 12. So the answer is true.
PS: more than one answer may be available and adding more source strings besides s1 and s2 should be similar to above process.