C语言实现 strrstr
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strrstr(const char *srcStr, const char *subStr)
{
if (!srcStr || !subStr) return NULL;
const int srcSize = strlen(srcStr);
const int subSize = strlen(subStr);
int i = subSize - 1;
int j = subSize;
int *prefix = malloc(sizeof(int) * subSize);
if (prefix == NULL) return (char *)NULL;
prefix[i] = j;
while (i > 0)
{
if ((j == subSize) || (subStr[i] == subStr[j]))
{
i--, j--;
prefix[i] = (subStr[i] == subStr[j]) ? prefix[j] : j;
}
else
j = prefix[j];
}
i = srcSize - 1;
j = subSize - 1;
while (i >= 0 && j >= 0)
{
j = (j == subSize || srcStr[i] == subStr[j]) ? i = i - 1, j - 1 : prefix[j];
}
if (prefix != NULL)
{
free(prefix);
prefix = NULL;
}
return (char *)((j == -1) ? (srcStr + i + 1) : NULL);
}