s1= aabccabc
s2= dbbabc
s3= aabdbbccababcc
Given s1,s2,s3 design an efficient algorithm to find whether s3 is formed from the interleaving of s1 and s2.
(tough testing case: str1: abcad str2: abdab str3: abcdabab)
Use four pointers p1 p2 p3 and p4, p1 point to str1, p2 point to str2, p3 and p4 point to str3
Bool Foo(char* p1,char* p2,char* p3, char* p4)
{
While(p1&&p3)
{
Int skip=0;
If(*p1==*p3&&skip==0) //match str1 and str3
{p1++;p3++;}
Else if(*p1==*p3 && skip==1) //match str2 and str3
{
While(*p4!=*p3)
{if(*p2==*p4) {p2++;p4++;} else return false;}
Skip=0;
}
Else if(*p1!=*p3)
{skip=1; p3++;}
}
If(p1) return false; //str1 does not match
While(p2&&p4)
{
If(*p2==*p4)
{p2++;p4++;}
Else return false
}
If(p2) return false;
Return true
}
No comments:
Post a Comment