Microsoft Interview Question
Software Engineer / Developersyup the logic i used was the same.. but since it was the last index.. thought it might be better to start from the right end of the strings and return the first time it matches.
Use autometa. N =Input String Length, Time O(N), Space O(1)
/*Assuming that input pointers are valid*/
int patternMatch (char* pInputStr, char* pPattern)
{
int inputLen = strlen (pInputStr);
int patternLen = strlen (pPattern);
int indexInPattern = patternLen - 1;
int indexInInput = inputLen - 1;
int returnIndex = -1;
while (indexInPattern >= 0)
{
if (pInputStr [indexInInput] == pPattern [indexInPattern])
{
indexInPattern --;
}
else
{
indexInPattern = patternLen - 1;
}
if (indexInPattern == -1)
{
returnIndex = indexInInput;
break;
}
indexInInput --;
}
return returnIndex;
}
Use autometa. N =Input String Length, Time O(N), Space O(1)
/*Assuming that input pointers are valid*/
int patternMatch (char* pInputStr, char* pPattern)
{
int inputLen = strlen (pInputStr);
int patternLen = strlen (pPattern);
int indexInPattern = patternLen - 1;
int indexInInput = inputLen - 1;
int returnIndex = -1;
while (indexInPattern >= 0)
{
if (pInputStr [indexInInput] == pPattern [indexInPattern])
{
indexInPattern --;
}
else
{
indexInPattern = patternLen - 1;
}
if (indexInPattern == -1)
{
returnIndex = indexInInput;
break;
}
indexInInput --;
}
return returnIndex;
}
int findIndex(char *s1,char *s2){
int len1,len2,i=0,j=0;
len1=strlen(s1);
len2=strlen(s2);
j=0;
for(i=0;i<len1;i++){
if(s1[i]==s2[j])
j++;
else
j=0;
if(j>len2)
return(i);
}
return -1;
}
- Anonymous January 24, 2011