题目:从源字符串中删除给定的字符串“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++;
}
}