删除特定的字符串

题目:从源字符串中删除给定的字符串“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!='\0' )
	{
		if( *s!='a' || *f!='b' )
		{
			if ( s < str)
				s = str;
			else
				s++;

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

		f++;
	}
}

  

posted @ 2013-08-25 16:23  simon1024  阅读(464)  评论(0编辑  收藏  举报