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