JSFiddle - React, Tailwind, and code Playground

HTML

<div id="container"></div>

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;
            }
      ...