JavaScript
var line=2;
test("abcd","xyz","axybczd");
test("xy","xxxy","xxyxxy");
test("acd","bac","bacadc");
test("cacb","cacd","cacacbcd");
test("aa","abaab","aabaaab");
test("xxyyxxab","xxyyxxcd","xxyyxxxaxyybxxcd");
test("xxyyxxab","xxyyxxyycd","xxyyxxxxayybxxyycd");
test("xxyyxxab","xxyyxxyycd","xxyyxxyycdxxyyxxab");
test("accc", "bcbc", "abcccbcc");
test("ab","c","cba");
test("abc","abc","abcabc");
test("abc","abc","abacbc");
test("abc","def","adbecf");
test("aaa","aaa","aaaaaa");
test("aa","ab","abaa");
test("aaax","aaay","aaaayaax");
test("aaaay","aaay","aaayaaaay");
test("aaaaaaaaaaay","aayaayaayaay","aayaayaayaayaaaaaaaaaaay");
test("acd","ack","acadck");
test("ack","acd","acadck");
test("aak","aad","aaadak");
test("acd","acd","acadcd");
test("abcde","abcd","aabbccdde");
test("abcde","abcd","aabbccded");
test("abcd","abcde","aabbccdde");
test("abcd","abcde","aabbccded");
test("1231231a","1231231b","12312311232311ab");
test("1231231a","1231231b","12312311231231ab");
test("aaaaaaaaaax","aaaaaaaaaay","aaaaaaaaaaaaaaaaaaaaxy")
function test(s1,s2,s3){
var c=document.getElementById("container");
c.innerHTML=c.innerHTML+line+"<br>";
test2(s1,s2,s3);
//test2(s2,s1,s3);
line++;
}
function test2(s1,s2,s3){
var c=document.getElementById("container");
s1=s1.split("");
s2=s2.split("");
s3=s3.split("");
while(s1.length && s2.length){
/*
if(line==30)
c.innerHTML=c.innerHTML+s1.join("")+" "+s2.join("")+
" "+s3.join("")+"<br>";
*/
if(s1[0]!=s3[0] && s2[0]!=s3[0]){
c.innerHTML=c.innerHTML+"false<br>";
return;
}
if(s1[0]!=s2[0] && s1[0]==s3[0]){ // normal case 1
s1.shift();
}else if(s1[0]!=s2[0] && s2[0]==s3[0]){ // normal case 2
s2.shift();
}else if(s1[1]==s3[1] && s2[1]==s3[1]){ //special case duplicate char
var i;
for(i=0;i<s1.length && i<s2.length;i++){
if(s1[i]!=s3[i] || s2[i]!=s3[i])
break;
}
...