0
点赞
收藏
分享

微信扫一扫

C语言实现 strrstr

juneyale 2022-04-14 阅读 68

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);
}
举报

相关推荐

0 条评论