删除特定的字符串

题目:从源字符串中删除给定的字符串“ab”,如源字符串为“fbaabbcdab”,删除“ab”后为“fbcd”。

要求:不能使用string,不用递归,时间复杂度O(n)。

分析:此题借鉴微软的一道面试题,采用快慢指针实现一次扫描完成删除操作。与微软那道题目不同的是,此题的慢指针存在回退的情况。

void deleteab(char* str)
{
	if (str == NULL)
		return;

	char* s = str;
	char* f = str+1;
        //标兵
	char pacer = '0';

	while( *s!='' )
	{
		if( *s!='a' || *f!='b' )
		{
			if ( s < str)
				s = str;
			else
				s++;

			*s = *f;
		}
		else
		{
			//处理ab开头的情况
                        if ( s == str )
				s = &pacer;
			else
				s--;
		}

		f++;
	}
}

  

原文地址:https://www.cnblogs.com/simonote/p/3280921.html